如果我们设第 i 种颜色一共出现了 cnti 次,那么不难发现如果方案合法则有 D∑i=1⌊cnti2⌋⩾m 我们简单推一下式子 D∑i=1⌊cnti2⌋⩾m=D∑i=1cnti−(cntimod 即我们要关注 cnt_i 的奇偶性。
当 n-2m\geqslant D 或 n-2m<0 时需要特判一下。
我们设 f_i 为在满足 \sum cnt=n 的情况下,cnt 为奇数的颜色恰好有 i 个的方案数。由于难以直接算 f,考虑二项式反演,设 g_i 为在满足 \sum cnt=n 的情况下,钦定 i 个颜色 cnt 为奇数,剩下任意的方案数。
我们考虑利用生成函数解决这个问题。
不难发现,对于某一个颜色,cnt 为奇数的方案数所对应的指数生成函数为 \frac{e^x-e^{-x}}{2},cnt 任意的方案数对应的指数生成函数为 e^x(因为每个珍珠是有编号的,所以用 EGF)。那么有 \begin{aligned} g_i&=\binom{D}{i}n^i(e^x)^{D-i}\\ &=\binom{D}{i}\frac{n!}{2^i}[x^n](e^x-e^{-x})^i(e^x)^{D-i} \end{aligned} 然后我们用二项式定理把 (e^x-e^{-x})^i 展开。 \begin{aligned} g_i&=\binom{D}{i}\frac{n!}{2^i}[x^n]\sum\limits_{j=0}^i\binom{i}{j}(e^x)^j(-e^x)^{i-j}(e^x)^{D-i}\\ &=\binom{D}{i}\frac{n!}{2^i}[x^n]\sum\limits_{j=0}^i\binom{i}{j}(-1) ^{i-j}(e^x)^j(e^{-x})^{i-j}(e^x)^{D-i}\\ &=\binom{D}{i}\frac{n!}{2^i}[x^n]\sum\limits_{j=0}^i\binom{i}{j}(-1) ^{i-j}(e^x)^j(e^x)^{j-i}(e^x)^{D-i}\\ &=\binom{D}{i}\frac{n!}{2^i}[x^n]\sum\limits_{j=0}^i\binom{i}{j}(-1) ^{i-j}(e^x)^{D-2(i-j)} \end{aligned} 然后我们把 (e^x)^{D-2(i-j)}(它的系数为 \frac{(D-2(i-j))^n}{n!})与组合数展开 \begin{aligned} g_i&=\frac{D!}{i!(D-i)!}\frac{n!}{2^i}\sum\limits_{j=0}^i\frac{i!}{j!(i-j)!}(-1) ^{i-j}\frac{(D-2(i-j))^n}{n!}\\ &=\frac{D!}{(D-i)!}\frac{1}{2^i}\sum\limits_{j=0}^i\frac{1}{j!(i-j)!}(-1) ^{i-j}(D-2(i-j))^n\\ &=\frac{D!}{(D-i)!}\frac{1}{2^i}\sum\limits_{j=0}^i\frac{1}{j!(i-j)!}(-1)^{j}(D-2j)^n\\ \end{aligned} 注意最后一行用 i-j 替换了 j。求和号内部的东西显然是卷积形式,NTT 计算即可。
然后我们需要反演回去,但是不能直接两重 for
,复杂度爆炸,注意到二项式反演的式子
\begin{aligned}
f_i&=\sum\limits_{j=i}^d\binom{j}{i}(-1)^{j-i}g_j\\
&=\frac{1}{i!}\sum\limits_{j=i}^d\frac{j!}{(j-i)!}(-1)^{j-i}g_j\\
\end{aligned}
注意到求和号后面是差一定的形式,把 j!g_j 的多项式系数反转就可以卷积了。
答案为 \sum\limits_{i=0}^{n-2m}f_i。注意你差一定的多项式卷完了以后系数也是反的,最后应该取的是多项式的 x^{d-n+2m} 到 x^d 项。
代码如下(两次 NTT 之间记得清空):
1 |
|
v1.5.2