BZOJ 3028: 食物
2017-02-20 16:58
316 查看
3028: 食物
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 506 Solved: 338
[Submit][Status][Discuss]
Description
[align=left]明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险![/align][align=left]我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。[/align]
[align=left]他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等[/align]
[align=left]当然,他又有一些稀奇古怪的限制:[/align]
[align=left]每种食物的限制如下:[/align]
[align=left] 承德汉堡:偶数个[/align]
[align=left] 可乐:0个或1个[/align]
[align=left] 鸡腿:0个,1个或2个[/align]
[align=left] 蜜桃多:奇数个[/align]
[align=left] 鸡块:4的倍数个[/align]
[align=left] 包子:0个,1个,2个或3个[/align]
[align=left] 土豆片炒肉:不超过一个。[/align]
[align=left] 面包:3的倍数个[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。[/align]
[align=left] [/align]
Input
[align=left]输入样例1[/align][align=left] 1[/align]
[align=left]输出样例1[/align]
[align=left] 1[/align]
[align=left] [/align]
[align=left]输入样例2[/align]
[align=left] 5[/align]
[align=left]输出样例2[/align]
[align=left] 35[/align]
[align=left] 数据范围[/align]
[align=left] 对于40%的数据,1<=N<=100000;[/align]
[align=left] 对于所有数据,1<=n<=10^500;[/align]
Output
Sample Input
Sample Output
HINT
Source
分析:
新学习的母函数...对于汉堡:
$1+x^{2}+x^{4}+x^{6}+……=\frac {1}{1-x^{2}}$
可乐:
$1+x$
鸡腿:
$1+x+x^{2}=\frac {1-x^{3}}{1-x}$
蜜桃多:
$x+x^{3}+x^{5}+x^{7}+……=\frac {x}{1-x^{2}}$
鸡块:
$1+x^{4}+x^{8}+……=\frac {1}{1-x^{4}}$
包子:
$1+x+x^{2}+x^{3}=(1+x)(1+x^{2})$
土豆片炒肉:
$1+x$
面包:
$1+x^{3}+x^{6}+……=\frac {1}{1-x^{3}}$
然后乘起来化简一下可以得到:$\frac {x}{(1-x)^{4}}$
根据广义二项式定理:
$f(x)= \frac {x}{(1-x)^{4}}$
$=x(1-x)^{-4}$
$=x \sum _{k=0}^{∞} \textrm{C}_{4+k-1}^{k} x^{k}$
$=x \sum _{k=0}^{∞} \textrm{C}_{k+3}^{3} x^{k}$
所以$x^{n}$的$n$次方项的系数为$\textrm{C}_{n+2}^{3}$
代码:
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> //by NeighThorn using namespace std; const int maxn=500+5,mod=10007; int n; char s[maxn]; inline int power(int x,int y){ int ans=1; while(y){ if(y&1) (ans*=x)%=mod; (x*=x)%=mod,y>>=1; } return ans; } signed main(void){ scanf("%s",s);n=0; for(int i=0;s[i];i++) n=(n*10%mod+s[i]-'0')%mod; printf("%d\n",n*(n+1)%mod*(n+2)%mod*power(6,mod-2)%mod); return 0; }
By NeighThorn
相关文章推荐
- BZOJ 3028: 食物 母函数
- 【bzoj3028】食物 数论+生成函数
- [母函数 泰勒展开] BZOJ 3028 食物
- BZOJ3028 食物 (生成函数)
- Bzoj3028 食物
- BZOJ 3028 食物 组合数学
- BZOJ 3028 食物
- 【bzoj3028】食物 母函数+乘法逆元
- BZOJ 3028: 食物(生成函数+快速幂)
- 【BZOJ 3028】 3028: 食物 (生成函数)
- bzoj 3028: 食物(母函数+广义二项式定理)
- bzoj 3028: 食物【生成函数】
- BZOJ 3028: 食物 母函数
- BZOJ 3028 食物 生成函数
- bzoj 3028 食物
- 【BZOJ3028】食物 母函数
- BZOJ 3028 食物 ——生成函数
- bzoj 3028: 食物 (生成函数)
- BZOJ3028 食物
- bzoj 3028: 食物 -- 母函数