zoukankan      html  css  js  c++  java
  • bzoj 3028 食物

    题目大意:

    要带k种东西分别满足如下条件
    物品1:偶数个
    物品2:0个或1个
    物品3:0个,1个或2个
    物品4:奇数个
    物品5:4的倍数个
    物品6:0个,1个,2个或3个
    物品7:不超过一个
    物品8:3的倍数个

    思路:

    把这些物品都写成生成函数形式 得 $$(1+x^2+x^4+...) imes (1+x) imes (1+x+x^2) imes (x+x^3+x^5+...) imes (1+x^4+x^8+...) imes (1+x+x^2+x^3) imes (1+x) imes (1+x^3+x^6+...)$$

    进而得 $$( frac{1}{1-x^2}) imes (1+x) imes (frac{1-x^3}{1-x}) imes (frac{x}{1-x^2}) imes (frac{1}{1-x^4}) imes (frac{1-x^4}{1-x}) imes (1+x) imes (frac{1}{1-x^3})$$

    化简得$frac{x}{(1-x)^4}$,我们需要求$x^n$这一项的系数,接下来两种操作

    法1:将式子展开得到$x imes (1+x+x^2+...)^4$ 

    则相当于求将$n-1$划分成四个自然数的方案数 考虑在$n$个空里插三个板 答案为$C_{n+2}^3$

    法2:考虑泰勒展开则$x imes (1-x)^{-4}=sum_{i=0}^n f^i(0) imes frac {x^i}{i!}$

    $n-1$次的系数为 $frac{f^(n-1)(0)}{(n-1)!}$

    $f'=(-4)*(u)^{-5}*(1-x)'=4*(1-x)^{-5}$求导以此类推

    即原式为$$frac {prod_{i=1}^{n-1} {i+3}} {(n-1)!}=n*(n+1)*(n+2)/6=C_{n+2}^3$$

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<map>
    10 #include<set>
    11 #define ll long long
    12 #define inf 2139062143
    13 #define MAXN 100100
    14 #define MOD 10007
    15 #define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
    16 #define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
    17 #define ren(x) for(register int i=fst[x];i;i=nxt[i])
    18 #define pb(i,x) vec[i].push_back(x)
    19 #define pls(a,b) (a+b)%MOD
    20 #define mns(a,b) (a-b+MOD)%MOD
    21 #define mlp(a,b) (1LL*(a)*(b))%MOD
    22 using namespace std;
    23 inline int read()
    24 {
    25     int x=0,f=1;char ch=getchar();
    26     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    27     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    28     return x*f;
    29 }
    30 int n;char ch;
    31 int q_pow(int bas,int t,int res=1)
    32 {
    33     for(;t;bas=mlp(bas,bas),t>>=1)
    34         if(t&1) res=mlp(res,bas);return res;
    35 }
    36 int main()
    37 {
    38     ch=getchar();
    39     while(isdigit(ch)) {n=(n*10+ch-'0')%MOD;ch=getchar();}
    40     printf("%d
    ",mlp(mlp(mlp(n,n+1),n+2),q_pow(6,MOD-2)));
    41 }
    View Code
  • 相关阅读:
    FPGA 在线调试方法概述
    Quartus II& Nios II 出错解决办法
    Verilog HDL--VGA显示
    常用电平转换方案
    Verilog HDL SPI通信——读
    Verilog HDL SPI通信——写
    Verilog HDL串口发送程序
    verilog HDL 串口接受程序
    关于AFNetworking中header的bug问题
    iOS项目的本地化处理(多国语言)
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/10438977.html
Copyright © 2011-2022 走看看