Cod sursa(job #48811)

Utilizator tm_raduToma Radu tm_radu Data 5 aprilie 2007 08:29:46
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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 >= 0 ) a[l2][k] += a[l1][k-i*j];
                if ( k+i*j <= 100000 ) a[l2][k] += a[l1][k+i*j];
            }
            l1 = !l1;
            l2 = !l2;
        }
    if ( L > 50000 ) printf("-1\n");
    else     printf("%d\n", a[l1][L+50000]);
    return 0;
}