一套题

我出了一套题,老师觉得数学题太多了(不是很懂),然后就先不用了。。

前夕

给定 $n \le {10} ^ 7$ ,求在 $[n]$ 的子集中选择若干个,使得交集大小为 $4$ 的倍数,问方案数对 $998244353$ 取模。

考虑钦定交集中的元素,附带容斥系数累加得到答案。列出交集大小为 $k$ 时,需要被计算的次数和实际被计算的次数。利用二项式反演,以及单位复数根的知识可以 $O(1)$ 求解出容斥系数。

时机成熟之时

给定 $n, k(\le 1000) ,$n$ 张邮票,每次等概率随机取一张,问取完所有 $n$ 张的 $t ^ k$ 的期望。

设 $f[i][j]$ 表示取得 $i$ 张的 $j$ 次方的期望,将 $(x + 1) ^ j$ 进行二项式展开,可以得到有关 $f[i][j]$ 的等式,从小到大递推,每次解一个方程,然后前缀和优化。如果将 $t ^ k$ 利用第二类 Stirling 数进行展开,那么 DP 的转移会更加简单。

净空

51nod 原题,给定 $\prod a_i$ ,将它从大到小进行阶乘分解。

暴力分解很容易想,在普通的二叉堆上打标记,把算法优化到 $O(n \log n)$ 。或者使用线段树、平衡树也是可以的。

封印之力

$n, a, b, c \le {10} ^ 9, k_1 + k_2 \le 10$

$$\sum_{x = 0} ^ n x ^ {k_1} {\lfloor \frac{ax + b}{c} \rfloor} ^ {k_2}$$

对 $k_2 = 0$ ,我至少需要自然数幂求和,所以用递推或者高斯消元或者伯努利数的方法处理出自然数幂求和的每一项系数。对 $a = 0$ ,按照 $k_2 = 0$ 和 $k_2 \ne 0$ 继续预处理。对 $a \ge c, b \ge c$ ,可以处理 $a \% c, b \% c$ 的情况,然后利用三项式展开处理出当前的情况。对 $a < c, b < c$ ,利用差分进行转化,推一推式子,也差不多用二项式定理做一做转移。

整个过程是辗转相除的过程,$k_1 + k_2$ 不增,$n, a, b, c$ 不增,所以可以用 int32 内的数实现 $O(\log n)$ 层的转移,每次的复杂度为 $O(k ^ 4)$ 。

猜你喜欢

转载自www.cnblogs.com/Sdchr/p/8906001.html