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

    (color{#0066ff}{ 题目描述 })

    明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应

    该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。他这次又准备带一些受欢迎的食物,

    如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下:

    承德汉堡:偶数个

    可乐:0个或1个

    鸡腿:0个,1个或2个

    蜜桃多:奇数个

    鸡块:4的倍数个

    包子:0个,1个,2个或3个

    土豆片炒肉:不超过一个。

    面包:3的倍数个

    注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛

    ),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。

    (color{#0066ff}{输入格式})

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

    (color{#0066ff}{输出格式})

    如题

    (color{#0066ff}{输入样例})

    1
        
    5
    

    (color{#0066ff}{输出样例})

    1
        
        
        
    35
    

    (color{#0066ff}{数据范围与提示})

    none

    (color{#0066ff}{ 题解 })

    生成函数

    (ans = (x^0+x^2+x^4+x^6...)*(x^0+x^1)*(x^0+x^1+x^2)*(x^1+x^3+x^5...)*(x^0+x^4+x^8...)*(x^0+x^1+x^2+x^3)*(x^0+x^1)*(x^0+x^3+x^6...))的第n项系数

    因为有(x^0+x^1+x^2+x^3+...=frac{1}{1-x})

    所以原式为(ans = (frac{1}{1-x^2})*(1+x)*(1+x+x^2)*(frac{x}{1-x^2})*(frac{1}{1-x^4})*(1+x+x^2+x^3)*(1+x)*(frac{1}{1-x^3}))

    还有一些项可以等比数列求和

    (ans = frac{1}{1-x^2}*frac{1-x^2}{1-x}*frac{1-x^3}{1-x}*frac{x}{1-x^2}*frac{1}{1-x^4}*frac{1-x^4}{1-x}*frac{1-x^2}{1-x}*frac{1}{1-x^3})

    大力约分

    (ans = frac{x}{(1-x^4)})的n次方项系数

    这个怎么搞呢?

    因为(egin{aligned}frac{1}{(1-x)^{n + 1}}=sum_{ige 0}C_{n+i}^i x^iend{aligned})

    因此可以化为(ans=x*egin{aligned}sum_{ige 0}C_{3+i}^i x^iend{aligned})

    把x弄进去(ans=egin{aligned}sum_{ige 0}C_{3+i}^i x^{i +1}end{aligned})

    改变一下i的枚举(ans=egin{aligned}sum_{ige 1}C_{2+i}^{i - 1} x^{i}end{aligned})

    则$ans=egin{aligned}sum_{ige 1}C_{2+i}^{i - 1} x^{i}end{aligned}的第n项系数=C_{2+n}^{n - 1} =C_{2+n}^{3} $

    然后就没有然后了,暴力组合数展开。。。qwq

    #include<bits/stdc++.h>
    #define LL long long
    const int mod = 10007;
    LL in() {
        char ch; LL x = 0, f = 1;
        while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
        for(x = ch ^ 48; isdigit(ch = getchar()); x = ((x << 1) + (x << 3) + (ch ^ 48)) % mod);
        return x * f;
    }
    int main() {
        LL n = in();
        printf("%lld
    ", (n * (n + 1) * (n + 2) / 6) % mod);
        return 0;
    }
    
  • 相关阅读:
    PHP数组(数组正则表达式、数组、预定义数组)
    面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
    uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
    LA4329 Ping pong 树状数组
    HDU 1257 最少拦截系统
    HDU 1260 Tickets
    codeforce 621D
    codeforce 621C Wet Shark and Flowers
    codeforce 621B Wet Shark and Bishops
    codeforce 621A Wet Shark and Odd and Even
  • 原文地址:https://www.cnblogs.com/olinr/p/10275085.html
Copyright © 2011-2022 走看看