如果我们设第 \(i\) 种颜色一共出现了 \(cnt_i\) 次,那么不难发现如果方案合法则有 \[ \sum\limits_{i=1}^D\lfloor \frac{cnt_i}{2} \rfloor\geqslant m \] 我们简单推一下式子 \[ \begin{aligned} &\sum\limits_{i=1}^D\lfloor \frac{cnt_i}{2} \rfloor\geqslant m\\ =&\sum\limits_{i=1}^D cnt_i-(cnt_i\bmod 2) \geqslant 2m\\ =&\sum\limits_{i=1}^D cnt_i\bmod 2\leqslant n-2m \end{aligned} \] 即我们要关注 \(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![x^n](\frac{e^x-e^{-x}}{2})^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 |
|