zoukankan      html  css  js  c++  java
  • BZOJ3028 食物

    Description

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

    Input

    输入一个数字(N)(1le n le 10^{500})

    Output

    如题

    Sample Input

    输入样例1
    1
    输入样例2
    5

    Sample Output

    输出样例1
    1
    输出样例2
    35

    生成函数题,对于每一种情况,我们构造生成函数并换成封闭形式

    1:(egin{aligned}sum_{i=0}^{infty}x^{2n}=frac{1}{1-x^2}end{aligned})

    2:(egin{aligned}1+xend{aligned})

    3:(egin{aligned}1+x+x^2=frac{1-x^3}{1-x}end{aligned})

    4:(egin{aligned}sum_{i=0}^{infty}x^{2n+1}=frac{x}{1-x^2}end{aligned})

    5:(egin{aligned}sum_{i=0}^{infty}x^{4n}=frac{1}{1-x^4}end{aligned})

    6:(egin{aligned}1+x+x^2+x^3=frac{1-x^4}{1-x}end{aligned})

    7:(egin{aligned}1+xend{aligned})

    8:(egin{aligned}sum_{i=0}^{infty}x^{3n}=frac{1}{1-x^3}end{aligned})

    然后将封闭形式相乘得到答案的生成函数化简后可以得到

    (egin{aligned}F(x)=frac{x}{(1-x)^4}end{aligned})

    根据牛顿广义二项式定理(egin{aligned}(x+y)^n=sum_{k=0}^{infty}dbinom{n}{k}x^{n-k}y^kend{aligned}),其中重新定义(dbinom{n}{k})的计算方法

    (egin{aligned}dbinom{r}{k}=frac{r imes (r-1) imes (r-2).... imes (r-k+1)}{k!}=frac{r^{underline{k}}}{k!}end{aligned})

    可得
    (egin{aligned}(1+x)^{-n}=sum_{k=0}^{infty}dbinom{-n}{k}x^k=sum_{k=0}^{infty}(-1)^kdbinom{n+k-1}{k}x^kend{aligned})

    (egin{aligned}F(x)=xsum_{k=0}^{infty}(-1)^kdbinom{4+k-1}{k}(-x)^k=xsum_{k=0}^{infty}dbinom{3+k}{3}x^kend{aligned})

    答案为(x^n)项的系数即(dbinom{2+n}{3})

    #include<bits/stdc++.h>
        
    #define LL long long
        
    #define _ 0
        
    using namespace std;
        
    /*Grievous Lady*/
        
    template <typename _n_> void read(_n_ & _x_){
        _x_ = 0;int _m_ = 1;char buf_ = getchar();
        while(buf_ < '0' || buf_ > '9'){if(buf_ == '-')_m_ =- 1;buf_ = getchar();}
        do{_x_ = _x_ * 10 + buf_ - '0';buf_ = getchar();}while(buf_ >= '0' && buf_ <= '9');_x_ *= _m_;
    }
        
    #define mod 10007
    
    const int kato = 1e3 + 10;
    
    LL n , ans;
    
    char yuni[kato];
    
    inline LL quick_pow(LL a , LL b){
        LL res = 1;
        for(; b ; b >>= 1 , a = a * a % mod){
            if(b & 1){
                res = res * a % mod;
            }
        }
        return res % mod;
    }
    
    inline int Ame_(){
        scanf("%s" , yuni);
        for(int i = 0;i < strlen(yuni);i ++){
            n = n * 10 + yuni[i] - '0';
            n = n % mod;
        }
        ans = n * (n + 1) % mod * (n + 2) % mod * quick_pow(6 , mod - 2) % mod;
        printf("%lld
    " , ans);
        return ~~(0^_^0);
    }
        
    int Ame__ = Ame_();
        
    int main(){;}
    
  • 相关阅读:
    关于 相对论 的 一些 讨论推理 杂集
    反相 大全
    收录 猴哥 对于 相对论 水星进动 星光偏折 引力透镜 GPS 的 说法
    哲学 一词 起源于 古希腊 的 “爱智慧”
    字符流的父类
    字符编码
    对象流
    BufferStream 缓存流
    OutputStream 以及 使用文件输入输出流实现文件的复制操作
    InputStream
  • 原文地址:https://www.cnblogs.com/Ame-sora/p/13596410.html
Copyright © 2011-2022 走看看