Pagini recente » Cod sursa (job #2506431) | Cod sursa (job #2761504) | Cod sursa (job #462142) | Cod sursa (job #2716211) | Cod sursa (job #1044251)
#include<fstream>
#define nm 35
#define mod 3210121
#define N 11000
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int ma[nm],a[nm][nm],nra,dim,x,s[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;
}
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;
}
for(i=1;i<dim;++i)
{
t=0;
for(x=i,j=1;x;j++,(x>>=1))
if(x&1)
s[++t]=j;
for(j=1;j<=t;++j)
for(e=1;e<=k;++e)
ma[e]=max(ma[e],a[s[j]][e]);
nra=S;
for(j=1;j<=k;++j)
{
nra-=ma[j];
ma[j]=0;
}
if(nra<=0)
continue;
if(t&1)
{
sol-=SP[nra];
while(sol<0)
sol+=mod;
}
else
{
sol+=SP[nra];
while(sol>=mod)
sol-=mod;
}
}
g<<sol;
return 0;
}