设有(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),即(Aleq n-2m)。
于是能否装满(m)个瓶子只和有多少种颜色出现奇数次有关,不难搞一个dp,设(dp_{i,j})表示前(i)个珍珠,有(j)种出现了奇数次的方案数;转移的话枚举一下第(i+1)颗珍珠是出现了奇数次的颜色还是出现了偶数次的颜色,乘上颜色数直接转移即可。复杂度是(O(nD))的。
这样我们的dp也就做到头了,考虑容斥一波,设(g_i)表示至少有(i)种颜色的珍珠出现了奇数次,设(F(x)=displaystyle sum_{igeq 0}frac{x^{2i+1}}{(2i+1)!})即出现次数为奇数次的珍珠的生成函数。那么就有(g_i=n![n]inom{D}{i}F^{i}(x)e^{x(D-i)}),即从(D)种颜色里选(i)种出现奇数次,对于剩下的(D-i)种颜色出现次数随意。
不难发现(F'(x)=displaystyle sum_{igeq 0}frac{x^{2i}(2i+1)}{(2i+1)!}=displaystyle sum_{igeq 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)之后再做一个二项式反演就能直接算答案了。
代码。