容斥原理 第二题 水!
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<set>
#include<map>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
//#define ull unsigned long long
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
const int MOD=1000007;
const double eps=1e-6;
const int N=500;
int c[N][N];
int F(int x)
{
if(x>=MOD)
{
x=x%MOD;
return x;
}
while(x<0)
{
x+=MOD;
}
return x;
}
int main()
{
//freopen("data.in","r",stdin);
memset(c,0,sizeof(c));
for(int i=0;i<N;++i)
for(int j=0;j<=i;++j)
if(i==j||j==0)
c[i][j]=1;
else
c[i][j]=(c[i-1][j]+c[i-1][j-1])%MOD;
int T;
cin>>T;
for(int w=1;w<=T;++w)
{
printf("Case %d: ",w);
int n,m,k;
cin>>n>>m>>k;
if(k>n*m||k<2)
cout<<"0"<<endl;
else
{
int sum=0;
sum+=(2*c[n*m-n][k]+2*c[n*m-m][k]);//cout<<sum<<endl;
sum-=(c[n*m-n-n][k]+c[n*m-m-m][k]+4*c[n*m-m-n+1][k]);
sum+=(2*c[n*m-m-m-n+2][k]+2*c[n*m-m-n-n+2][k]);
sum-=(c[n*m-n-n-m-m+4][k]);
cout<<F(c[n*m][k]-sum)<<endl;
}
}
return 0;
}
浙公网安备 33010602011771号