Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

考虑分别计算恰有 $i$ 中颜色恰出现 $S$ 次的方案数,记为 $f_i$,则答案为 $\sum_{i=0}^{m}{f_i w_i}$。

直接算 $f_i$ 不好算,考虑至少有 $i$ 中颜色恰出现 $S$ 次的方案数,记为 $g_i$,显然,

$$g_i = C_{m}^{i} \frac{n!}{(n - iS)! (S!)^i} (m - i)^{n - iS}$$

式子中的三项分别表示: “选出 $i$ 种颜色”,“选位置让这 $i$ 种颜色恰出现 $S$ 次”,“其余的随便填剩下的颜色”。

这个式子是会算重的。具体的,对于一种恰有 $j(j \ge i)$ 种颜色恰出现 $S$ 次的方案,它在 $f_i$ 中会被算 $C_j^i$ 次。于是,

$$g_i = \sum_{j=i}^{m}{C^i_j f_j}$$

根据二项式反演有,

$$f_i = \sum_{j=i}^{m}{C^i_j g_j (-1)^{j-i}}$$

至此我们有了 $O(m^2)$ 的算法。


二项式反演是可以化成卷积形式的,

$$f_i = \sum_{j=i}^{m}{C^i_j g_j (-1)^{j-i}}$$

$$\rightarrow \quad f_i = \frac{1}{i!} \sum_{j=i}^{m}{\frac{j!}{(j-i)!} g_j (-1)^{j-i}}$$

下边懒得打这个 $\frac{1}{i!}$。

令 $A_i = i!g_i \, , \, B_i = \frac{(-1)^{i}}{i!}$ 则,

$$f_i = \sum_{j=i}^{m}{A_{j} B_{j-i}}$$

这里涉及差卷积,令 $A'_i = A_{m-i} \, , \, f'_i = f_{m-i}$ (也就是翻转)则,

$$f'_{m-i} = \sum_{j=i}^{m}{A'_{m-j} B_{j-i}}$$

再令 $t=j-i$ 有,

$$f'_{m-i} = \sum_{t=0}^{m-i}{A'_{m-i-t} B_{t}}$$

也就是,

$$f'_{i} = \sum_{t=0}^{i}{A'_{i-t} B_{t}}$$

这就是标准卷积形式,使用 $NTT$ 即可。$(1004535809=479 \times 2^{21} +1)$

值得注意的是,上述变形没有用到关于 $f_i$ 或 $g_i$ 的性质,于是对任何二项式反演均成立。


题目2939  [HAOI 2018]染色      10      评论
2023-02-01 20:09:26