• BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛


    题目大意:

    约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有K(O≤K<N)只牝牛.
    请计算一共有多少种排队的方法.所有牡牛可以看成是相同的,所有牝牛也一样.答案对5000011取模

    题解:

    貌似没什么好说的,组合数一下

    代码:

    #include<cstdio>
    using namespace std;
    const int mod=5000011;
    int ni[100005],mi[100005];
    int pow(int a,int b){
    	int ans=1;
    	while (b){
    		if (b&1) ans=1ll*ans*a%mod;
    		a=1ll*a*a%mod;
    		b=b>>1;
    	}
    	return ans;
    }
    int C(int n,int m){
    	return 1ll*mi[m]*ni[n]%mod*ni[m-n]%mod;
    }
    int main(){
    	int n,k;
    	scanf("%d%d",&n,&k);
    	mi[0]=1;
    	for (int i=1; i<=n; i++) mi[i]=1ll*mi[i-1]*i%mod;
    	ni[0]=1;
    	for (int i=1; i<=n; i++) ni[i]=1ll*ni[i-1]*pow(i,mod-2)%mod;
    	int ans=0;
    	for (int A=1; n>=(A-1)*k+A; A++){
    		int B=n-(A-1)*k-A;
    		(ans+=C(A,A+B))%=mod;
    	}
    	printf("%d
    ",(ans+1)%mod);
    	return 0;
    }
    

      

  • 相关阅读:
    中海洋朗讯杯比赛总结[2014年12月]
    青理工ACM比赛总结和反思[2014年11月]
    程序员技术练级攻略
    一天能学会的计算机技术
    UVa 1597
    回滚机制
    超时和重试机制
    降级特技
    限流详解
    隔离术
  • 原文地址:https://www.cnblogs.com/silenty/p/9296115.html
Copyright © 2020-2023  润新知