zoukankan      html  css  js  c++  java
  • BZOJ 3028: 食物

    3028: 食物

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 506  Solved: 338
    [Submit][Status][Discuss]

    Description

    明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!
    我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。
    他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等
    当然,他又有一些稀奇古怪的限制:
    每种食物的限制如下:
           承德汉堡:偶数个
           可乐:0个或1个
                鸡腿:0个,1个或2个
                蜜桃多:奇数个
                鸡块:4的倍数个
                包子:0个,1个,2个或3个
           土豆片炒肉:不超过一个。
                面包:3的倍数个
     
     
     
    注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。
     

    Input

    输入样例1
      1
    输出样例1
      1
     
    输入样例2
      5
    输出样例2
      35
     数据范围
       对于40%的数据,1<=N<=100000;
       对于所有数据,1<=n<=10^500;

    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}^{∞}  extrm{C}_{4+k-1}^{k} x^{k}$

    $=x sum _{k=0}^{∞} extrm{C}_{k+3}^{3} x^{k}$

    所以$x^{n}$的$n$次方项的系数为$ extrm{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+1)%mod*(n+2)%mod*power(6,mod-2)%mod);
    	return 0;
    }
    

      


    By NeighThorn

  • 相关阅读:
    【转】iOS:AvPlayer设置播放速度不生效的解决办法
    【转】 Android xml中 @和?区别,style和attr小结
    【转】Android 旋转动画,停止和持续旋转
    【转】Android SDK,ADT,API 版本的对应关系
    【转】说说Android中的style和theme
    【转】 Android中selector的使用
    【转】[置顶] 在Android中显示GIF动画
    mysql if case条件更新
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/neighthorn/p/6420226.html
Copyright © 2011-2022 走看看