Cod sursa(job #850252)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 8 ianuarie 2013 10:32:32
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>

using namespace std;

#define MAXN 22
#define MAXS 44200
#define MOD 10000

int N, M, X, i, j, Max, Min, t;
int v[ MAXN * MAXN ], a[ MAXS * 3 ], b[ MAXS * 3 ];

int main()
{
    ifstream f("diamant.in");
    ofstream g("diamant.out");

    f >> N >> M >> X;

    for(i = 1; i <= N; ++i)
        for(j = 1; j <= M; ++j)
            ++v[0], v[ v[0] ] = i*j, Max += i * j;

    a[ Max + MAXS ] = a[ -Max + MAXS ] = b[ Max + MAXS ] = b[ - Max + MAXS ] = 1;
    for(i = 1; i <= v[0]; ++i)
    {
        for(j = Max; j >= -Max; --j)
            b[j - v[i] + MAXS ] += a[j + MAXS], b[j - v[i] + MAXS ] %= MOD, b[j - 2*v[i] + MAXS ] += a[j + MAXS], b[j - 2* v[i] + MAXS ] %= MOD;
        for(j = Max; j >= -Max; --j)
            a[j + MAXS] = b[j + MAXS];
    }

    if(X > MAXS || X < -MAXS)
        g << 0 << endl;
    else
        g << a[ X + MAXS ] << endl;

    f.close();
    g.close();

    return 0;
}