Cod sursa(job #2125918)

Utilizator mariusn01Marius Nicoli mariusn01 Data 8 februarie 2018 21:21:24
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <cstring>

#define MOD 10000
#define DIM 70000

using namespace std;

int V[DIM];
int W[DIM];

int *P = V + (DIM/2);
int *Q = W + (DIM/2);

int N, M, i, j, k, t, v, minim, maxim, X;

int main() {
    ifstream fin("diamant.in");
    ofstream fout("diamant.out");
    fin>>N>>M>>X;
    P[0] = 1;
    for (i=1;i<=N;i++)
        for (j=1;j<=M;j++){

            for (t=minim;t<=maxim;t++)
                if (P[t]) {
                    v = i*j;

                    Q[t]+=P[t];
                    Q[t+v]+=P[t];
                    Q[t-v]+=P[t];

                    ///Q[t] %= MOD;
                    if (Q[t] >= MOD)
                        Q[t] -= MOD;

                    ///Q[t+v] %= MOD;
                    if (Q[t+v] >= MOD)
                        Q[t+v] -= MOD;

                    ///Q[t-v] %= MOD;
                    if (Q[t-v] >= MOD)
                        Q[t-v] -= MOD;

                }
            minim -= i*j;
            maxim += i*j;
            /*
            for (t=minim;t<=maxim;t++) {
                P[t] = Q[t];
                Q[t] = 0;
            }
            */

            memcpy(V, W, sizeof(W));
            memset(W, 0, sizeof(W));
        }
    if (X > DIM/2 || X < -DIM/2)
        fout<<0;
    else
        fout<<P[X];
    return 0;
}