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

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

 

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

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

汉堡:1+x2+x4+=11x2

可乐:1+x=1x21x

鸡腿:1+x+x2=1x31x

蜜桃:x+x3+x5+......=x1x2

鸡块:1+x4+x8+......=11x4

包子:1+x+x2+x3=1x41x

炒肉:1+x=1x21x

面包:1+x3+x6+......=11x3

 

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

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

由于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 }    
复制代码

 

posted @   AlphaInf  阅读(298)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示