UVA11806 Cheerleaders
阿新 • • 發佈:2018-12-07
uva digi stream gist mod get open pen str PDF
題意
分析
如果要求是某行某列沒有石子很好算,就一個組合數。
然後要求某行某列有,就用容斥原理就行了。
時間復雜度\(O(k^2 + 16T)\)
代碼
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<set> #include<map> #include<queue> #include<stack> #include<algorithm> #include<bitset> #include<cassert> #include<ctime> #include<cstring> #define rg register #define il inline #define co const template<class T>il T read() { rg T data=0; rg int w=1; rg char ch=getchar(); while(!isdigit(ch)) { if(ch=='-') w=-1; ch=getchar(); } while(isdigit(ch)) { data=data*10+ch-'0'; ch=getchar(); } return data*w; } template<class T>T read(T&x) { return x=read<T>(); } using namespace std; typedef long long ll; co int K=500,mod=1e6+7; int C[K+10][K+10]; int add(int x,int y) { x+=y; return x>=mod?x-mod:x; } int sub(int x,int y) { x-=y; return x<0?x+mod:x; } int main() { // freopen(".in","r",stdin); // freopen(".out","w",stdout); C[0][0]=1; for(int i=0;i<=K;++i) { C[i][0]=C[i][i]=1; for(int j=1;j<i;++j) C[i][j]=add(C[i-1][j],C[i-1][j-1]); } int T=read<int>(); for(int kase=1;kase<=T;++kase) { int n,m,k,sum=0; read(n);read(m);read(k); for(int s=0;s<16;++s) { int b=0,r=n,c=m; if(s&1) r--,b++; if(s&2) r--,b++; if(s&4) c--,b++; if(s&8) c--,b++; if(b&1) sum=sub(sum,C[r*c][k]); else sum=add(sum,C[r*c][k]); } printf("Case %d: %d\n",kase,sum); } return 0; }
UVA11806 Cheerleaders