容斥原理 + 多项式卷积.
经典模型,有 $n$ 种颜色的球,每种球有 $a_i$ 个,要将它们排成一行,使得相邻两个球颜色不同,求方案数.
下面认为同种颜色的球是没有区别的,若有区别,最后将答案乘上 $\prod (a_i!)$ 即可.
用容斥原理计算,若恰有 $k$ 个位置是相邻两个球颜色相同的,方案数为 $t(k)$ ,则对答案贡献为 $(-1)^k t(k)$ .
考虑每种颜色的小球贡献,若第 $i$ 种球在最后有 $j$ 个位置是相邻的,那么实际对可重排列长度的贡献个数为 $a_i-j$ ,那么可重排列的分子的贡献放在最后计算,分母的贡献和容斥系数拆到每种球上,将每种球的多项式卷起来就可以了.
具体地,对于第 $i$ 种球,我们构造一个多项式
$$
f(i)=\sum_{j=0}^{a_i-1} (-1)^j\binom {a_i-1}j \frac{1}{(a_i-j)!}x^{a_i-j}
$$
其中 $\binom{a_i-1}{j}$ 表示选择哪 $j$ 个位置合并在一起.
记 $F=\prod f(i), m=\sum a_i$ ,答案即为 $\sum_{i=n}^{m} i!\cdot [x^i]F$ .
1 | //%std |