【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}\)。
于是有
不难发现这是一个卷积的形式,直接ntt求出\(g\)即可。求出\(g\)之后再做一个二项式反演就能直接算答案了。
代码。