首页 > 代码库 > UVa11806 Cheerleaders
UVa11806 Cheerleaders
容斥问题
考虑上下左右四个边界只满足其中1/2/3/4个边界有人的情况,可以用组合数算。
总共只有16种情况。
可以用容斥原理求解。
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<vector> 8 using namespace std; 9 const int mod=1000007;10 const int mxn=510;11 int read(){12 int x=0,f=1;char ch=getchar();13 while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}14 while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}15 return x*f;16 }17 int n,m,k;18 int c[mxn][mxn];19 void init(){20 for(int i=0;i<=500;i++){21 c[i][0]=1;22 for(int j=1;j<=i;j++)23 c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;24 }25 return;26 }27 int main(){28 int i,j;29 int T=read(),cas=0;30 init();31 while(T--){32 n=read();m=read();k=read();33 int ct,a,b;34 int ans=0;35 for(i=0;i<=15;i++){36 ct=0;a=n;b=m;37 if(i&1)a--,ct++;38 if(i&2)b--,ct++;39 if(i&4)a--,ct++;40 if(i&8)b--,ct++;41 if(ct&1)(ans-=c[a*b][k])%=mod;42 else (ans+=c[a*b][k])%=mod;43 }44 printf("Case %d: %d\n",++cas,ans);45 }46 return 0;47 }
UVa11806 Cheerleaders
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。