Cod sursa(job #51660)

Utilizator peanutzAndrei Homorodean peanutz Data 16 aprilie 2007 09:51:40
Problema Diamant Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <memory.h>
#define SHIFT 2200000000
#define NMAX (SHIFT*2 + 100)
long a[NMAX], b[NMAX];
#define a (a + SHIFT)
#define b (b + SHIFT)
int n, m;
long x;

void dinamic()
{
        long i, j, k;

        a[0] = 1;
        for(i = 1; i <= n; ++i)
        {
                for(j = 1; j <= m; ++j)
                {
                        memcpy(b, a, sizeof(a));
                        for(k = -SHIFT; k <= SHIFT; ++k)
                        {
                                if(a[k])
                                {
                                        ++b[k];
                                        ++b[k - i*j];
                                        ++b[k + i*j];
                                }
                        }
			for(k = -SHIFT; k <= SHIFT; ++k)
			{
				a[k] = b[k];
                        }
                }
        }
}

int main()
{
        freopen("diamant.in", "r", stdin);
        freopen("diamant.out", "w", stdout);

        scanf("%d %d %ld\n", &n, &m, &x);

        dinamic();

        printf("%ld\n", a[x]);

        fclose(stdin);
        fclose(stdout);

        return 0;
}