Pagini recente » Cod sursa (job #738141) | Cod sursa (job #1480044) | Cod sursa (job #123860) | Cod sursa (job #281512) | Cod sursa (job #1044259)
#include<fstream>
#define nm 35
#define mod 3210121
#define N 11000
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int a[nm][nm],nra,dim,x,s[nm],ma[nm][nm],e,i,j,S,k,n,t;
long long P[N],I[N],sol,SO[N],SP[N];
long long rise(long long x,int po)
{
long long so=1;
while(po)
{
if(po&1)
{
so*=x;
so%=mod;
}
x=(x*x)%mod;
po>>=1;
}
return so;
}
void back(int lvl)
{
if(lvl==n+1)
{
if(!t) return;
nra=S;
for(i=1;i<=k;++i)
nra-=ma[lvl-1][i];
if(nra>=0)
{
if(t&1)
{
sol-=SP[nra];
if(sol<0)
sol+=mod;
}
else
{
sol+=SP[nra];
if(sol>=mod)
sol-=mod;
}
}
return;
}
for(i=1;i<=k;++i)
ma[lvl][i]=ma[lvl-1][i];
back(lvl+1);
t++;
for(i=1;i<=k;++i)
ma[lvl][i]=max(ma[lvl-1][i],a[lvl][i]);
back(lvl+1);
t--;
}
int main ()
{
f>>k>>S>>n;
P[1]=1;
for(i=2;i<=S+k-1;++i)
P[i]=P[i-1]*i%mod;
for(i=1;i<=S+k-1;++i)
I[i]=rise(P[i],mod-2);
dim=(1<<n);
for(i=1;i<=n;++i)
for(j=1;j<=k;++j)
f>>a[i][j];
SO[0]=1;
SO[1]=1LL*P[k]*I[k-1]%mod*I[1]%mod;
for(i=2;i<=S;++i)
{
SO[i]=1LL*P[i+k-1]*I[k-1]%mod*I[i]%mod;
sol+=SO[i]-k;
if(sol>=mod)
sol-=mod;
}
SP[0]=1;
for(i=1;i<=S;++i)
{
SP[i]=SP[i-1]+SO[i];
if(SP[i]>=mod)
SP[i]-=mod;
}
back(1);
g<<sol;
return 0;
}