Cod sursa(job #53872)

Utilizator grecoTiberiu-Lucian Florea greco Data 23 aprilie 2007 16:23:19
Problema Diamant Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
using namespace std;

#include <cstdio>
#include <cstring>

#define FIN "diamant.in"
#define FOUT "diamant.out"

#define MAX_N 32
#define MAX_M 32

int N, M, X, S;
int T[2][1<<19];

#define t(i, j) T[(i)&1][j+90000]

int main()
{
	int i, j, k, p, d;
	freopen(FIN, "r", stdin);
	freopen(FOUT, "w", stdout);
	scanf("%d %d %d", &N, &M, &X);
	S = (N*M)*(N*M+1)/2;
	if (X < -S || X > S) {
		printf("0\n");
		return 0;
	}
	t(0, 0) = 1;
	for (p = i = 1; i <= N; ++i)
		for (j = 1; j <= M; ++j, ++p) {
			memset(T[p&1], 0, sizeof(T[0]));
			for (d = i*j, k = -S; k <= S; ++k)
				t(p, k) = (t(p-1, k-d)+t(p-1, k)+t(p-1, k+d))%10000;
		}
	printf("%d\n", t(N*M, X));
	return 0;
}