Pagini recente » Cod sursa (job #3273388) | Cod sursa (job #1965663) | Cod sursa (job #1891822) | Borderou de evaluare (job #133079) | Cod sursa (job #1847394)
#include <cstdio>
#include <algorithm>
#define BIT(x) (1<<(x))
#define MOD 3210121
using namespace std;
typedef long long llong;
int mat[21][31];
int c[31][10001];
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
llong rc, rez = 0;
int s, n, k, i, j, p, v[31], nb, sc;
scanf("%d%d%d", &k, &s, &n);
for(i = 0; i < k; i++)
c[i][0] = 1;
for(i = 0; i < s; i++)
c[0][i] = i + 1;
for(i = 1; i < k; i++)
{
for(j = 1; j < s; j++)
{
c[i][j] = (c[i - 1][j] + c[i][j - 1]) % MOD;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < k; j++)
{
scanf("%d", &mat[i][j]);
mat[i][j]--;
}
}
for(i = 1; i < BIT(n); i++)
{
nb = 0;
sc = 0;
for(p = 0; p < k; p++)
v[p] = 0;
for(j = 0; j < n; j++)
{
if(i & BIT(j))
{
nb++;
for(p = 0; p < k; p++)
{
v[p] = max(v[p], mat[j][p]);
}
}
}
for(p = 0; p < k; p++)
{
sc += v[p];
}
if(s - sc > 0)
rc = c[k - 1][s - sc - 2];
else rc = 0;
if(nb & 1) rez = (rez + rc) % MOD;
else
{
if(rez - rc < 0) rez += MOD;
rez = (rez - rc) % MOD;
}
}
rez = (c[k - 1][s - 2] - rez) % MOD;
printf("%lld", rez);
return 0;
}