Cod sursa(job #2150871)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 3 martie 2018 20:54:59
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#define DIM 45000
#define MOD 10000
using namespace std;

ifstream fin ("diamant.in");
ofstream fout ("diamant.out");
int n,m,x,mini,maxi,i,j,k,nr;
int v[2*DIM],w[2*DIM];
int *D = v + DIM-2;
int *E = w + DIM-2;
int main (){

    fin>>n>>m>>x;
    D[0] = 1;
    mini = maxi = 0;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++){
            /// copiem pe v in w

            for (k=mini;k<=maxi;k++)
                E[k] = D[k];
            nr = i*j;
            for (k=mini;k<=maxi;k++)
                if (D[k] != 0){
                    E[k+nr] += D[k];
                    E[k-nr] += D[k];

                    if (E[k+nr] >= MOD)
                        E[k+nr] -= MOD;
                    if (E[k-nr] >= MOD)
                        E[k-nr] -= MOD;
                }
            /// copiem pe w in v
            mini -= nr;
            maxi += nr;
            for (k=mini;k<=maxi;k++)
                D[k] = E[k];
        }
    if (x >= mini && x <= maxi)
        fout<<D[x];
    else
        fout<<0;

    return 0;
}