Pagini recente » Cod sursa (job #3345808) | Cod sursa (job #3303239) | Cod sursa (job #86000) | Cod sursa (job #2196361) | Cod sursa (job #3332075)
#include <bits/stdc++.h>
/// Template Dutzu
#define fast ios_base::sync_with_stdio(false);cin.tie(0);
#define MOD 3210121
#define int long long
using namespace std;
ifstream fin("cowfood.in");
ofstream fout("cowfood.out");
int v[21][31];
int f[100001];
bool used[31];
int total;
int k,s;
int expo(int a, int n)
{
int p=1;
while (n)
{
if (n%2)
p=(1LL*p*a)%MOD;
a=(1LL*a*a)%MOD;
n/=2;
}
return p;
}
int comb(int n, int k)
{
long long dem;
dem=f[n];
long long imp;
imp=(1LL*f[k]*f[n-k])%MOD;
imp=expo(imp,MOD-2);
return (1LL*dem*imp)%MOD;
}
int maxim[31];
int A[31];
void bkt(int vf, int& rez, int n)
{
if (vf>n)
{
int cnt=0;
long long suma=0;
memset(A,0,sizeof(A));
for (int i=1;i<=n;i++)
if (used[i]==1)
{
cnt++;
for (int j=1;j<=k;j++)
A[j]=max(A[j],v[i][j]);
}
int difzero=0;
for (int j=1;j<=k;j++)
{
suma+=A[j];
if (A[j]>0)
difzero++;
}
if (cnt==0)
return;
long long r=s-suma;
if (r<0)
return;
long long w=comb(r+k,k);
if (difzero==0)
{
w=(w-1-(1LL*k*r)%MOD+MOD)%MOD;
} else if (difzero==1)
{
w=(w-r-1+MOD)%MOD;
}
if (cnt%2)
rez=(rez+w)%MOD;
else
rez=(rez-w+MOD)%MOD;
return;
}
bkt(vf+1,rez,n);
used[vf]=1;
bkt(vf+1,rez,n);
used[vf]=0;
}
signed main()
{
fast
int n;
fin>>k>>s>>n;
f[0]=1;
for (int i=1;i<=100000;i++)
f[i]=(1LL*f[i-1]*i)%MOD;
total=(comb(s+k,k)-1-1LL*k*s+MOD)%MOD;
for (int i=1;i<=n;i++)
for (int j=1;j<=k;j++)
fin>>v[i][j];
int rez=0;
bkt(1,rez,n);
fout<<(total-rez+MOD)%MOD;
return 0;
}