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