首先我们有一些函数推收敛式的套路。
(这些是知名伪证,结论是对的,但是证明过程是胡扯)比如对于y=1+x+x2y=1+x+x^2y=1+x+x2 ,我们知道xy=x+x2+x3xy=x+x^2+x^3xy=x+x2+x3,所以有xy−x3=y−1xy-x^3=y-1xy−x3=y−1,即y=1−x31−xy=\frac{1-x^3}{1-x}y=1−x1−x3。用类似的方法,我们还可以知道∑i=0inf=11−x\sum_{i=0}^{inf}=\frac{1}{1-x}∑i=0inf=1−x1等。
然后我们写一下所有食物的生成函数:
汉堡:∑i=0infx2i=11−x2\sum_{i=0}^{inf} x^{2i} =\frac{1}{1-x^2}∑i=0infx2i=1−x21
可乐:1+x1+x1+x
鸡腿:1+x+x2=1−x31−x1+x+x^2=\frac{1-x^3}{1-x}1+x+x2=1−x1−x3
蜜桃多:∑i=0infxi−∑i=0infx2i=x1−x2\sum_{i=0}^{inf} x^i -\sum_{i=0}^{inf} x^{2i}=\frac{x}{1-x^2}∑i=0infxi−∑i=0infx2i=1−x2x
鸡块:∑i=0infx4i=11−x4\sum_{i=0}^{inf} x^{4i}=\frac{1}{1-x^4}∑i=0infx4i=1−x41
包子:1+x+x2+x3=1−x41−x1+x+x^2+x^3=\frac{1-x^4}{1-x}1+x+x2+x3=1−x1−x4
土豆:1+x1+x1+x
面包:∑i=0infx3i=11−x3\sum_{i=0}^{inf}x^{3i}=\frac{1}{1-x^3}∑i=0infx3i=1−x31
把它们全部乘起来得:x(1−x)4\frac{x}{(1-x)^4}(1−x)4x,在这个多项式中,nnn次项的系数就是选nnn个食物的方案数。
将(1−x)−4(1-x)^{-4}(1−x)−4展开。根据广义二项式定理,我们知道kkk次项的系数为(−1)k(−4k)(-1)^k(^k_{-4})(−1)k(−4k) ,而
(kn)=∏i=0k−1(n−i)k!(_k^n)=\frac{\prod_{i=0}^{k-1} (n-i)}{k!}(kn)=k!∏i=0k−1(n−i)
所以(1−x)−4(1-x)^{-4}(1−x)−4的nnn次项系数为(n+1)(n+2)(n+3)6\frac{(n+1)(n+2)(n+3)}{6}6(n+1)(n+2)(n+3)。又因为原多项式还要乘以一个xxx,所以它的nnn次项系数,也就是答案,就是n(n+1)(n+2)6\frac{n(n+1)(n+2)}{6}6n(n+1)(n+2)
然后边读入边取模什么的一下子就搞出来了。