Cod sursa(job #651488)

Utilizator andrei.12Andrei Parvu andrei.12 Data 20 decembrie 2011 17:09:22
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>

const int valmax = 44100, lg = 88205, mod = 10000;

int n, m, x, i, s, j, k, d[2][lg];

int main()
{
	freopen("diamant.in", "rt", stdin);
	freopen("diamant.out", "wt", stdout);

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

	if (x > valmax || x < -valmax){
		printf("0\n");

		return 0;
	}

	d[1][valmax] = 1;
	for (i = 1, s = 0; i <= n; i ++)
		for (j = 1; j <= m; j ++, s = 1 - s)
			for (k = 0; k <= 2 * valmax; k ++){
				d[s][k] = d[1 - s][k];

				if (k - i * j >= 0){
					d[s][k] += d[1 - s][k - i * j];

					if (d[s][k] >= mod)
						d[s][k] -= mod;
				}
				if (k + i * j <= 2 * valmax){
					d[s][k] += d[1 - s][k + i * j];

					if (d[s][k] >= mod)
						d[s][k] -= mod;
				}
			}

	printf("%d\n", d[1 - s][x + valmax]);

	return 0;
}