Cod sursa(job #1571308)

Utilizator CollermanAndrei Amariei Collerman Data 17 ianuarie 2016 20:06:54
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");

const int NMAX = 88300;
const int MOD = 10000;

int N, M, X, SMax, dist;
int PD[2][NMAX];

int main()
{
    fin >> N >> M >> X;
    SMax = ((N * (N + 1)) / 2) * ((M * (M + 1)) / 2);

    if(abs(X) > SMax) { fout << "0\n"; return 0; }

    PD[0][SMax] = 1;
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++)
        {
            dist += i * j;
            for(int k = -dist + SMax; k <= dist + SMax; ++k)
                PD[1][k] = (PD[0][k] + PD[0][k - i * j] + PD[0][k + i * j]) % MOD;

            for(int k = -dist + SMax; k <= dist + SMax; ++k)
                PD[0][k] = PD[1][k], PD[1][k] = 0;
        }

    fout << PD[0][X + SMax] << '\n';
    return 0;
}