题目归档 #8
目录
Luogu4318 完全平方数
首先肯定二分。接下来问题变成求 \(1 \sim n\) 中有多少个数是完全平方数的倍数,考虑容斥。
在这道题中,我们先把 \(2\) 的平方的倍数和 \(3\) 的平方的倍数给标记,接下来发现 \(6\) 的平方的倍数被标记了两次。所以它们的容斥系数分别为 \(1,1,-1\)。
不难发现,一个数若含偶数个互不相同素因子,其容斥系数为 \(-1\),若含奇数个互不相同素因子,其容斥系数为 \(1\)。一个数质因数分解后出现二次及以上的项则容斥系数为 \(0\)。可以结合容斥原理进行理解。
- 容斥原理:
注意到其中奇数个元素的容斥系数为 \(1\),偶数个元素的容斥系数为 \(-1\)。
不难发现,一个数的容斥系数即莫比乌斯函数。预处理 \(\mu\) 即可,答案即为 \(\sum\limits_{i=2}^\sqrt{n} \mu(i) \left\lfloor\frac{n}{i^2}\right\rfloor\)。
[USACO08MAR]Land Acquisition G
首先,如果对于一块 \(w \times h\) 的土地,存在一块土地 \(w' \times h'\) 满足 \(w \leq w'\) 且 \(h \leq h'\),这块土地肯定可以白嫖。
于是先把所有者样的土地扔掉(可以用栈来做),然后按 \(w\) 递增,\(h\) 递减排一遍序。
之后就是 dp,方程显然:\(f_i=\max\{f_{j-1}+w_i \times h_j\}\)。
然后上斜率优化就行了。最终复杂度 \(O(n \log n)\)。
Luogu P4859 已经没有什么好害怕的了
先用一年级数学知识计算出需要选出 \(x\) 组 \(a>b\)。
把 \(a_i\) 和 \(b_i\) 都按照升序排一遍。令 \(cnt_i\) 表示有多少个 \(b_j\) 小于 \(a_i\)。
\(dp_{i,j}\) 表示对于前 \(i\) 个 \(a_i\),选出 \(j\) 个数并给它们各自安排一个 \(b_j\) 使得 \(b_j < a_i\) 的方案数。有
\(g_i = dp_{n,i} \times (n-i)!\) 表示选出 \(\geq i\) 组 \(a > b\) 的方案总数,并且存在算重。具体地,令选出 \(x\) 组 \(a>b\) 的方案数为 \(f_x\),则 \(f_x\) 在 \(g_i (x \geq i)\) 中被计算了 \(\dbinom{x}{i}\) 次。
于是有
由二项式反演:
就解决了。

浙公网安备 33010602011771号