Cod sursa(job #1683596)

Utilizator margikiMargeloiu Andrei margiki Data 10 aprilie 2016 15:26:50
Problema Cowfood Scor 4
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
# 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;
        for (i=1; i<=K; ++i) {
            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;
}