Cod sursa(job #176516)

Utilizator plastikDan George Filimon plastik Data 11 aprilie 2008 13:02:17
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
// Diamant, Infoarena/ONI 2006
// http://infoarena.ro/problema/diamant

#include <cstdio>

const int XMAX = 44101;
const int MOD = 10000;

int n, m, x;
int Ans[2][2 * XMAX];

inline int ind(int c) {
	return c + XMAX;
}

int main() {

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

	scanf("%d %d %d", &m, &n, &x);
	
	int i, j, s, c, xmax = 0;
	Ans[0][ind(0)] = 1;

	for (s = 0; s < m * n; ++ s) {
		i = s / n + 1;
		j = s % n + 1;
		xmax += i * j;
		for (c = -xmax; c <= xmax; ++ c) {
			Ans[(s + 1) % 2][ind(c)] = ( Ans[(s + 1) % 2][ind(c)] + Ans[s % 2][ind(c)] ) % MOD;
			Ans[(s + 1) % 2][ind(c + i * j)] = ( Ans[(s + 1) % 2][ind(c + i * j)] + Ans[s % 2][ind(c)] ) % MOD;
			Ans[(s + 1) % 2][ind(c - i * j)] = ( Ans[(s + 1) % 2][ind(c - i * j)] + Ans[s % 2][ind(c)] ) % MOD;
		}
	}

	printf("%d\n", Ans[(m * n) % 2][ind(x)]);

	return 0;
}