Cod sursa(job #35038)

Utilizator MariusMarius Stroe Marius Data 21 martie 2007 19:15:46
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
using namespace std;

const char iname[] = "diamant.in";
const char oname[] = "diamant.out";

#define inf  - 44105
#define sup  + 44105
#define modulo 10000

int V[2][sup - inf];

int main(void)
{
	freopen(iname, "r", stdin);
	int N;
	int M;
	int X;
	scanf("%d %d", & N, & M);
	scanf("%d", & X);
	int stp = 0;
	V[stp][sup] = 1;
	for (int i = 1; i <= N; ++ i) {
		for (int j = 1; j <= M; ++ j) {
			int num = i * j;
			stp ^= 1;
			for (int k = inf + 1; k < sup; ++ k) 
				V[stp][k + sup] = V[stp ^ 1][k + sup];
			for (int k = inf + 1; k < sup; ++ k) {
				if (V[stp ^ 1][k + sup] > 0)
					V[stp][k + num + sup] = (V[stp][k + num + sup] + V[stp ^ 1][k + sup]) % modulo, 
					V[stp][k - num + sup] = (V[stp][k - num + sup] + V[stp ^ 1][k + sup]) % modulo;
			}
		}
	}
	if (X < 0)
		X = - X;
	freopen(oname, "w", stdout);
	if (X >= sup)
		printf("0\n");
	else
		printf("%d\n", V[stp][X + sup]);
	return 0;
}