Pagini recente » Cod sursa (job #597618) | Cod sursa (job #178774) | Cod sursa (job #801708) | Cod sursa (job #1891370) | Cod sursa (job #1670810)
#include <cstdio>
#include <algorithm>
using namespace std;
const int mod=3210121;
int v[25][35],fact[10100],comb[10100],v1[35];
int rid_put(int a,int n)
{
int p=1;
for(int i=1;i<=n;i<<=1)
{
if(n&i) p=(1LL*p*a)%mod;
a=(1LL*a*a)%mod;
}
return p;
}
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
int k,s,n,sol=0;
scanf("%d%d%d",&k,&s,&n);
for(int i=0;i<n;i++)
for(int j=1;j<=k;j++) scanf("%d",&v[i][j]);
fact[0]=1;
for(int i=1;i<=s+k;i++) fact[i]=(1LL*fact[i-1]*i)%mod;
for(int i=k;i<=s+k;i++)
comb[i]=(1LL*fact[i]*rid_put((1LL*fact[k]*fact[i-k])%mod,mod-2))%mod;
int lim=1<<n;
for(int i=1;i<lim;i++)
{
int nr=0,a=s+k;
for(int j=1;j<=k;j++) v1[j]=0;
for(int j=0;j<n;j++)
if(i&(1<<j))
{
nr++;
for(int q=1;q<=k;q++) v1[q]=max(v1[q],v[j][q]);
}
for(int j=1;j<=k;j++) a-=v1[j];
if(nr%2) sol=(sol+comb[a])%mod;
else sol=(sol-comb[a]+mod)%mod;
}
sol=(comb[s]-sol+mod)%mod;
printf("%d",sol);
return 0;
}