题目描述
你有
C
种不同的巧克力,每种都有无限个。
问有次序地取出
分析
考虑生成函数。令
f(x)=(10!+x22!+x44!⋯)C−m(x1!+x33!+x55!⋯)m
那么答案就是
(Cm)n![xn]f(x)Cn
上面那两个式子的生成函数,其实分别是
ex−e−x2
和
ex+e−x2
(这部分考场上没推出来,一直纠结怎么把奇数项和偶数项提出来,实际上这么简单的小技巧是要记住的。
那么剩下的就顺理成章了。
f(x)=(ex−e−x2)C−m(ex+e−x2)m
=(e2x−12ex)C−m(e2x+12ex)m
=(e2x−1)C−m(e2x+1)m2CeCx
换元 y=e2x
f(x)=(y−1)C−m(y+1)m2CeCx
现在要求出这个函数的 n 次项系数。
想一下这个东西乘开以后长啥样,大概是一个二次项展开的形式。
这里下面除的一个
eCx
实际上可以直接在对应的系数上减掉。
用快速幂FFT可以
O(ClogC)
算出
di
把
y
带回去,我们要考虑
实际上
10!+(2ix)11!+(2ix)22!⋯
因此,它对 n 次项的贡献显然就是
而我们最后乘上的 n! 恰好与这里的抵消掉了。
于是问题就这样被解决了。
时间复杂度
O(ClogC)
空间复杂度
O(C)