Cod sursa(job #48821)

Utilizator tm_raduToma Radu tm_radu Data 5 aprilie 2007 08:41:52
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>

int n, m, L;
int i, j, k;
int a[2][100101];
int l1, l2;
int li, ls;

int main()
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);
    scanf("%d %d %d", &n, &m, &L);
    a[0][50000] = 1;
    l1 = 0, l2 = 1;
    li = ls = 50000;
    for ( i = 1; i <= n; i++ )
        for ( j = 1; j <= m; j++ )
        {
            li -= i*j;
            ls += i*j;
            for ( k = li; k <= l2; k++ ) a[l2][k] = 0;
            for ( k = li; k <= ls; k++ )
            {
                a[l2][k] = a[l1][k];
                if ( k-i*j >= li ) a[l2][k] += a[l1][k-i*j];
                if ( k+i*j <= ls ) a[l2][k] += a[l1][k+i*j];
                while ( a[l2][k] >= 10000 ) a[l2][k] -= 10000;
            }
            l1 = !l1;
            l2 = !l2;
        }
    if ( L > 50000 || L < -50000 ) printf("0\n");
    else          printf("%d\n", a[l1][L+50000]);
    return 0;
}