bzoj 3208 食物(生成函数)
程序员文章站
2024-03-21 17:36:46
...
先推一下生成函数
承德汉堡:偶数个
可乐:0个或1个
鸡腿:0个或1个或2个
蜜桃多:奇数个
鸡块:四的倍数个
包子:0个或1个或2个或3个
土豆片炒肉:不超过一个
面包:三的倍数个
总生成函数:
跟据广义二项式定理答案即为的系数
所以可以边读边膜,代码如下:
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 10007
using namespace std;
string tmp;
long long n;
long long inv(long long a)
{
int b=mod-2,ans=1;
while(b)
{
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int main()
{
cin>>tmp;
for(int i=0;i<tmp.length();i++)
{
n=(n*10+tmp[i]-'0')%mod;
}
printf("%lld\n",((n*(n+1)%mod)*(n+2)%mod)*inv(6)%mod);
}