Cod sursa(job #36195)

Utilizator gcosminGheorghe Cosmin gcosmin Data 23 martie 2007 10:13:41
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <string.h>

#define JEG 50000
#define MOD 10000
#define RED(x) x -= (x >= MOD) ? MOD : 0;

int N, M, S;

short ant[JEG << 1];
short cur[JEG << 1];

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

	scanf("%d %d %d", &N, &M, &S);

	ant[0 + JEG] = 1;

	for (i = 1; i <= N; i++)
		for (j = 1; j <= M; j++) {
			sum = i * j;

			for (q = 0; q < (JEG << 1); q++) {
				if (q - sum >= 0) cur[q] += ant[q - sum], RED(cur[q]);
				if (q + sum < (JEG << 1)) cur[q] += ant[q + sum], RED(cur[q]);
				cur[q] += ant[q], RED(cur[q]);
			}

			memcpy(ant, cur, sizeof(cur));
			memset(cur, 0, sizeof(cur));
		}

	if (-JEG >= S || S >= JEG) printf("0\n");
	else printf("%d\n", ant[S + JEG]);
	
fclose(stdin);
fclose(stdout);
return 0;
}