Pagini recente » Cod sursa (job #1343080) | Cod sursa (job #561377) | Cod sursa (job #1601612) | Cod sursa (job #2936730) | Cod sursa (job #1683641)
# include <bits/stdc++.h>
# define MOD 3210121
# define NN 22
# define KK 32
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int i,j,n,m,AUX,total,S,K,sol;
int current[KK], aux[NN][KK], v[NN][KK];
void BACK (int niv, int nr) {
if (niv==n+1) {
if (nr==0) return;
int P=1, cnt=0;
for (i=1; i<=K; ++i)
if (current[i]!=0) ++cnt;
if (cnt<2) return;
for (i=1; i<=K; ++i) {
if (current[i]==0) P=1LL * P * (S - current[i]) % MOD;
else P=1LL * P * (S - current[i] + 1) % MOD;
}
if (nr%2==1) AUX=(AUX + P + MOD) % MOD;
else AUX=(AUX - P + MOD) % MOD;
} else {
BACK (niv+1, nr); // nu mai adaug nimic
//il adaug pe niv
for (int i=1; i<=K; ++i) {
aux[niv][i]=current[i];
current[i]=max(current[i], v[niv][i]);
}
BACK (niv+1, nr+1);
for (int i=1; i<=K; ++i)
current[i]=aux[niv][i];
}
}
int main ()
{
f>>K>>S>>n;
for (int i=1; i<=n; ++i)
for (int j=1; j<=K; ++j)
f>>v[i][j];
BACK (1, 0);
total=1;
for (int i=1; i<=K; ++i)
total=1LL * total * S % MOD;
sol=(total - AUX + MOD) % MOD;
g<<sol<<"\n";
return 0;
}