zoukankan      html  css  js  c++  java
  • 母函数入门

    BZOJ3027

    http://www.lydsy.com/JudgeOnline/problem.php?id=3027

    显而易见

    母函数是这坨玩意

     所以总数不超过b的方案,对于这一坨

     我们暴力枚举一个kxy

    那么它对ans的贡献为

    复杂度O(2n*n) 

    #include<cstdio>
    #define FOR(i,s,t) for(register int i=s;i<=t;++i)
    typedef long long ll;
    int mul;
    const int mod=2004;
    int n,a,b;
    int m[12];
    inline int getC(int n,int m){
    	if(n<m)return 0;
    	ll Mod=1ll*mul*mod,ans=1ll;
    	for(register int i=n-m+1;i<=n;++i)ans=1ll*ans%Mod*i%Mod;
    	return (ans/mul)%mod; 
    }
    inline int dfs(int dep,int k,int y,int lim){
    	return (dep==n+1?(mod+k*getC(n+lim-y,n)%mod):(dfs(dep+1,-k,y+m[dep]+1,lim)+dfs(dep+1,k,y,lim)))%mod;
    }
    int main(){
    	scanf("%d%d%d",&n,&a,&b);
    	mul=1;FOR(i,1,n)mul*=i,scanf("%d",m+i);
    	printf("%d
    ",(dfs(1,1,0,b)-dfs(1,1,0,a-1)+mod)%mod);
    	return 0;
    } 
    

      

    BZOJ3028

    http://www.lydsy.com/JudgeOnline/problem.php?id=3028

    (1).

    (2).

    (3).

    (4).

    (5).

    (6).

    (7).

    (8).

     

    把(1)~(8)乘起来得到 

    因此,

    #include<cstdio>
    char c;
    const int mod=10007;
    inline int fp(int a,int b){
    	int ret=1;
    	while(b){
    		if(b&1)ret=ret*a%mod;
    		b>>=1;
    		a=a*a%mod; 
    	}
    	return ret;
    }
    int data;
    int main(){
    	while(c=getchar(),c<='9'&&c>='0')data=(data<<1)+(data<<3)+c-48,data%=mod;
    	printf("%lld",1ll*data*(data+1)%mod*(data+2)%mod*fp(6,mod-2)%mod);
        return 0;  
    }
    

      

  • 相关阅读:
    JAVA 8学习笔记-第五章
    JAVA 8学习笔记-第一章
    JAVA 8学习笔记-第二章
    MySQL应用
    Mac给iTerm2终端配色
    masOS支持NTFS读写,无需第三方软件
    macOS Apache配置用于支持Python CGI编程
    Vim
    Thrift
    Netflix Hystrix
  • 原文地址:https://www.cnblogs.com/Stump/p/8085180.html
Copyright © 2011-2022 走看看