Pagini recente » Cod sursa (job #1824314) | Cod sursa (job #666566) | Cod sursa (job #1552848) | Cod sursa (job #1881618) | Cod sursa (job #2036979)
#include <cstdio>
#include <iostream>
#include <algorithm>
#define MOD 3210121
using namespace std;
FILE *f=fopen("cowfood.in","r");
FILE *g=fopen("cowfood.out","w");;
int N,K,S;
int A[25][35];
int C[10035][35];
int tmp[35];
int main()
{
fscanf(f,"%d%d%d",&K,&S,&N);
for(int i=1;i<=N;i++)for(int j=1;j<=K;j++)fscanf(f,"%d",&A[i][j]);
for(int i=0;i<=S+K;i++)
{
C[i][0]=1;if(i<=K)C[i][i]=1;
for(int j=1;j<i&&j<=K;j++)
{
C[i][j]=C[i-1][j]+C[i-1][j-1];
if(C[i][j]>=MOD)C[i][j]-=MOD;
}
}
int ans=C[S+K][K]-1-K*S;
for(int conf=1;conf<(1<<N);conf++)
{
int sgn=1;
for(int i=1;i<=K;i++)tmp[i]=0;
for(int i=0;i<N;i++)
{
if((conf>>i)&1)
{
sgn*=-1;
for(int j=1;j<=K;j++)
{
tmp[j]=max(tmp[j],A[i+1][j]);
}
}
}
int s=S;
for(int i=1;i<=K;i++)s-=tmp[i];
if(s<0)continue;
ans+=sgn*C[s+K][K];
if(ans<0)ans+=MOD;
if(ans>=MOD)ans-=MOD;
}
fprintf(g,"%d",ans);
fclose(f);
fclose(g);
return 0;
}