1. 程式人生 > >2018.12.30 bzoj3028: 食物(生成函式)

2018.12.30 bzoj3028: 食物(生成函式)

傳送門
生成函式模板題。


我們直接把每種食物的生成函式列出來:
承德漢堡: 1 + x 2 + x 4

+ . . . = 1 1 x
2
1+x^2+x^4+...=\frac 1{1-x^2}
可樂: 1 + x =
1 x 2 1 x 1+x=\frac{1-x^2}{1-x}

雞腿: 1 + x + x 2 = 1 x 3 1 x 1+x+x^2=\frac{1-x^3}{1-x}
蜜桃多: x + x 3 + x 5 + . . . = x ( 1 + x 2 + x 4 + . . . ) = x 1 x 2 x+x^3+x^5+...=x(1+x^2+x^4+...)=\frac x{1-x^2}
雞塊: 1 + x 4 + x 8 + x 12 + . . . = 1 1 x 4 1+x^4+x^8+x^{12}+...=\frac 1{1-x^4}
包子: 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 = 1 x 2 1 x 1+x=\frac{1-x^2}{1-x}
面 包: 1 + x 3 + x 6 + x 9 + . . . = 1 1 x 3 1+x^3+x^6+x^9+...=\frac 1{1-x^3}
把所有的乘起來: f ( x ) = x ( 1 x ) 4 = x ( 1 + x + x 2 + . . . ) 4 f(x)=\frac x{(1-x)^4}=x(1+x+x^2+...)^4
我們要求 x n x^n 的係數。
也就是求 g ( x ) = ( 1 + x + x 2 + . . . ) 4 g(x)=(1+x+x^2+...)^4 x n 1 x^{n-1} 的係數。
相當於求將 n 1 n-1 拆成四個自然數的方案數,這個組合數學搞定 A n s = C n + 2 3 Ans=C_{n+2}^3
程式碼:

#include<bits/stdc++.h>
using namespace std;
const int mod=10007;
int n=0;
int main(){
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))n=((n<<3)+(n<<1)+(ch^48))%mod,ch=getchar();
	cout<<n*(n+1)%mod*(n+2)%mod*1668%mod;
	return 0;
}