Cod sursa(job #643120)

Utilizator DastasIonescu Vlad Dastas Data 2 decembrie 2011 23:24:31
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>

const int maxval = 45000;
const int maxsz = 100001;
const int mod = 10000;

FILE *in = fopen("diamant.in","r"), *out = fopen("diamant.out","w");

int n, m, t;

int a[maxsz];
int b[maxsz];

int main()
{
    fscanf(in, "%d %d %d", &n, &m, &t);

    int s = 0;
    for ( int i = 1; i <= n; ++i )
        for ( int j = 1; j <= m; ++j )
            s += i*j;

    if ( t > s || t < -s )
    {
        fprintf(out, "%d\n", 0);
        return 0;
    }

    a[maxval] = 1;
    for ( int i = 1; i <= n; ++i )
        for ( int j = 1; j <= m; ++j )
        {
            for ( int k = -s; k <= s; ++k )
                b[k + maxval] = a[k + i*j + maxval] + a[k + maxval] + a[k - i*j + maxval],
                b[k + maxval] %= mod;

            for ( int k = -s; k <= s; ++k )
                a[k + maxval] = b[k + maxval];
        }

    fprintf(out, "%d\n", a[t + maxval]);

    return 0;
}