zoukankan      html  css  js  c++  java
  • 【BZOJ3028】食物(生成函数)

    【BZOJ3028】食物(生成函数)

    题面

    一个人要带(n)个物品,共有(8)种物品,每种的限制分别如下:

    偶数个;0/1个;0/1/2个;奇数个;

    4的倍数个;0/1/2/3个;0/1个;3的倍数个。

    求方案数。

    (n<=10^{500})

    题解

    对于八个物品的限制,分别构造生成函数,然后乘起来就是我们要的解。

    化简后得到$$F(x)=frac{x}{(1-x)^4}=x(1+x+x^2+...)^4$$
    现在考虑求第(n)项系数。考虑第(n)项的组合意义,即将(n)划分为(4)个自然数的方案数。
    所以第(n)项为(C_{n+2}^3),时间复杂度(O(1))

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    #define ll long long
    #define RG register
    #define MOD 10007
    #define INV 1668
    inline int read()
    {
        RG int x=0,t=1;RG char ch=getchar();
        while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
        if(ch=='-')t=-1,ch=getchar();
        while(ch<='9'&&ch>='0')x=(x*10+ch-48)%MOD,ch=getchar();
        return x*t;
    }
    int main()
    {
    	int n=read();
    	printf("%lld
    ",1ll*n*(n+1)%MOD*(n+2)%MOD*INV%MOD);
    	return 0;
    }
    
    
  • 相关阅读:
    IDEA 现有项目连接SVN
    图片预加载,懒加载
    element-ui table中排序 取消表格默认排序问题
    Linux vim编辑命令
    linux mount 硬盘挂载和卸载
    Linux mke2fs 硬盘格式化
    Linux rm 删除文件
    linux 创建和删除目录
    linux 配置IP
    kickstart自动化安装--tftp+nfs+dhcp
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8798406.html
Copyright © 2011-2022 走看看