• [BZOJ3028]食物


    Description

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

    Input

    输入一个数字N,1<=n<=10^500

    Output

    如题

    Sample Input

    输入样例1

    1

    输入样例2

    5

    Sample Output

    输出样例1

    1

    输出样例2

    35


    题解

    生成函数简单题
    就是等比数列求和的应用
    原题目的要求可以看做以下几个生成函数
    (1+x^2+x^4+...=frac{1}{1-x^2}\ 1+x=frac{1 - x^2}{1 - x}\ 1+x+x^2=frac{1-x^3}{1-x}\ x+x^3+x^5+...=frac{1}{1-x}-frac{1}{1-x^2}=frac{x}{1-x^2}\ 1+x^4+x^8+...=frac{1}{1-x^4}\ 1+x+x^2+x^3=frac{1-x^4}{1-x}\ 1+x=frac{1-x^2}{1-x}\ 1+x^3+x^6+...=frac{1}{1-x^3})
    把这些都乘起来最后得到的就是(frac{x}{(1-x)^4})
    如果是我们常见的(frac{1}{(1-x)^4})
    那么答案就应该是(C(n+3 , 3))
    但是分子是(x),也就是说所有项都要升一次幂,所以对应的系数就应该是(C(n+2,3))

    代码

    #include<cstdio>
    const int mod = 10007 ;
    using namespace std ;
    
    inline int read() {
    	char c = getchar() ; int x = 0 , w = 1; 
    	while(c>'9'||c<'0') { if(c=='-') w = -1 ; c = getchar() ; }
    	while(c>='0'&&c<='9') { x = x*10+c-'0' ; c = getchar() ; x %= mod ; }
    	return x*w ;
    }
    
    int n ; 
    int main() {
    	n = read() ;
    	printf("%d
    ",1LL * n * (n + 1) * (n + 2) % mod * 1668 % mod) ;
    	return 0 ;
    }
    
  • 相关阅读:
    [ZJOI2013]K大数查询 浅谈整体二分
    2019暑假杭二day1测试总结
    2019暑假杭二day2测试总结
    2019暑假杭二day3测试总结
    2019暑假杭二day4测试总结
    2019暑假杭二day5测试总结
    一些有趣的教学视频
    karatsuba乘法
    多项式求逆元
    FFT
  • 原文地址:https://www.cnblogs.com/beretty/p/10526630.html
Copyright © 2020-2023  润新知