【CTS2019】珍珠

题目

设有\(A\)种颜色颜色出现了奇数次,出现的次数总和为\(B\);那么就有\(D-A\)种颜色出现偶数次,出现的次数总和为\(n-B\)。那么就能装\(\frac{B-A}{2}+\frac{n-B}{2}=\frac{n-A}{2}\)个瓶子。如果要至少装满\(m\)个瓶子,就有\(\frac{n-A}{2}\geq m\),即\(A\leq n-2m\)

于是能否装满\(m\)个瓶子只和有多少种颜色出现奇数次有关,不难搞一个dp,设\(dp_{i,j}\)表示前\(i\)个珍珠,有\(j\)种出现了奇数次的方案数;转移的话枚举一下第\(i+1\)颗珍珠是出现了奇数次的颜色还是出现了偶数次的颜色,乘上颜色数直接转移即可。复杂度是\(O(nD)\)的。

这样我们的dp也就做到头了,考虑容斥一波,设\(g_i\)表示至少有\(i\)种颜色的珍珠出现了奇数次,设\(F(x)=\displaystyle \sum_{i\geq 0}\frac{x^{2i+1}}{(2i+1)!}\)即出现次数为奇数次的珍珠的生成函数。那么就有\(g_i=n![n]\binom{D}{i}F^{i}(x)e^{x(D-i)}\),即从\(D\)种颜色里选\(i\)种出现奇数次,对于剩下的\(D-i\)种颜色出现次数随意。

不难发现\(F'(x)=\displaystyle \sum_{i\geq 0}\frac{x^{2i}(2i+1)}{(2i+1)!}=\displaystyle \sum_{i\geq 0}\frac{x^{2i}}{(2i)!}\),那么显然有\(F(x)+F'(x)=e^x\)。再进一步发现\(F''(x)=F(x)\)。利用这两条性质构造一下\(F(x)\),发现\(F(x)=\frac{e^x-e^{-x}}{2}\)

于是有

\[\begin{aligned} g_i=&n![n]\binom{D}{i}(\frac{e^x-e^{-x}}{2})e^{x(D-i)}\\ =&n![n]\frac{\binom{D}{i}}{2^i}e^{x(D-i)}\sum_{j=0}^i\binom{j}{i}e^{xj}(-1)^{i-j}e^{x(j-i)}\\ =&n![n]\frac{\binom{D}{i}i!}{2^i}\sum_{j=0}^i\frac{(-1)^{i-j}e^{x(2j-2i+D)}}{(i-j)!}\times \frac{1}{j!}\\ =&\frac{\binom{D}{i}i!}{2^i}\sum_{j=0}^i\frac{(-1)^{i-j}(2j-2i+D)^n}{(i-j)!}\times \frac{1}{j!} \end{aligned} \]

不难发现这是一个卷积的形式,直接ntt求出\(g\)即可。求出\(g\)之后再做一个二项式反演就能直接算答案了。

代码

posted @ 2020-06-04 13:34  asuldb  阅读(197)  评论(0编辑  收藏  举报