Cod sursa(job #1490234)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 22 septembrie 2015 23:17:27
Problema Diamant Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#define MAX 805
#define X 44105
#define mod 10000

int n, m, x, u[2 * X], v[2 * X], i, j, k, mini, maxi;

int main(){
	freopen("diamant.in", "r", stdin);
	freopen("diamant.out", "w", stdout);
	scanf("%d%d%d", &n, &m, &x);
	if(x < -X + 5 || x > X - 5){
		printf("0\n");
		return 0;
	}
	int val = n * m * (n + 1) * (m + 1) / 4;
	u[val] = 1;
	v[val] = 1;
	mini = maxi = val;
	for(i = 1; i <= n; i++)
		for(j = 1; j <= m; j++){
			for(k = mini - i * j; k <= maxi + i * j; k++){
				if(k - i * j >= 0)
					v[k] = (v[k] + u[k - i * j]) % mod;
				if(k + i * j <= 2 * val)
					v[k] = (v[k] + u[k + i * j]) % mod;
			}
			for(k = mini - i * j; k <= maxi + i * j; k++)
				u[k] = v[k];
			mini -= i * j;
			maxi += i * j;
		}
	printf("%d\n", u[val + x]);
	return 0;
}