Pagini recente » Cod sursa (job #1144579) | Cod sursa (job #1429702) | Cod sursa (job #1443067) | Cod sursa (job #82550) | Cod sursa (job #3303183)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream f ("cowfood.in");
ofstream g ("cowfood.out");
const int mod=3210121;
int k, s, n;
int mat[25][35], c[10101][31], sum[10101];
int ret=0;
void precalc ()
{
for (int i=0;i<10101;i++)
{
c[i][0]=1;
for (int j=1;j<=min (i, 30ll);j++)
{
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
}
sum[0]=1;
for (int i=1;i<=s;i++)
{
sum[i]=(sum[i-1]+c[i+k-1][k-1])%mod;
}
}
int table[25][35];
void bk (int poz, int sgn)
{
if (poz==n+1)
{
int s1=s;
for (int i=1;i<=k;i++)
{
s1-=table[poz-1][i];
}
if (s1>=0) ret=(ret+mod+sum[s1]*sgn)%mod;
}
else
{
for (int i=1;i<=k;i++)
table[poz][i]=table[poz-1][i];
bk (poz+1, sgn);
for (int i=1;i<=k;i++)
table[poz][i]=max (table[poz-1][i], mat[poz][i]);
bk (poz+1, -sgn);
}
}
int32_t main ()
{
f >> k >> s >> n;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=k;j++)
{
f >> mat[i][j];
}
}
precalc ();
ret=(mod*2-s*k-1)%mod;
bk (1, 1);
g << ret;
return 0;
}