【bzoj3028】 食物 生成函数+隔板法

题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3028

 

这题的推导很妙啊,裸的推母函数的题。

我们首先构造出每种食物的母函数:

汉堡:$1+x^2+x^4+……=\frac{1}{1-x^2}$

可乐:$1+x=\frac{1-x^2}{1-x}$

鸡腿:$1+x+x^2=\frac{1-x^3}{1-x}$

蜜桃:$x+x^3+x^5+......=\frac{x}{1-x^2}$

鸡块:$1+x^4+x^8+......=\frac{1}{1-x^4}$

包子:$1+x+x^2+x^3=\frac{1-x^4}{1-x}$

炒肉:$1+x=\frac{1-x^2}{1-x}$

面包:$1+x^3+x^6+......=\frac{1}{1-x^3}$

 

然后,我们将这八个母函数乘起来,得到$\frac{x}{(1-x)^4}$,所求答案为$\frac{x}{(1-x)^4}$的n次项系数。

考虑如何求这个东西,不难发现,$\frac{x}{(1-x)^4}=x \times (\frac{1}{1-x})^4$,然后又因为$\frac{1}{1-x}=\sum_{i=0}{\infty} x^i$,可以想象成有一个物品集合A,其中每种权值恰好有1个,那么$\frac{x}{(1-x)^4}$的n次项系数相当于从4个A集合中各取出1个,并且这4个物品的权值和为n的方案数,这个东西通过插板法简单推导下可以推出其答案为$\binom{n+2}{3}$。

由于n很大,读入的时候先取个模再求答案即可。

代码很短,推导稍长....

 1 #include<bits/stdc++.h>
 2 #define MOD 10007
 3 #define INV6 1668
 4 using namespace std;
 5 char c[12345]={0};
 6 
 7 int main(){
 8     scanf("%s",c);
 9     int len=strlen(c),n=0;
10     for(int i=0;i<len;i++) n=(n*10+c[i]-'0')%MOD;
11     printf("%d\n",n*(n+1)%MOD*(n+2)%MOD*INV6%MOD);
12 }    

 

转载于:https://www.cnblogs.com/xiefengze1/p/9021754.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值