Cod sursa(job #793965)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 4 octombrie 2012 21:22:43
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb

#include <cstdio>
#include <cstring>

const int MAX_SIZE(100000);
const int MOD(10000);
const int MAX_VALUE(44100);

int data1 [MAX_SIZE];
int *const v1(data1 + (MAX_SIZE >> 1));
int data2 [MAX_SIZE];
int *const v2(data2 + (MAX_SIZE >> 1));

int n, m, x;

inline void dynamic (void)
{
	*v2 = 1;
	int i, j, d, p;
	for (i = 1 ; i <= n ; ++i)
		for (j = 1 ; j <= m ; ++j)
		{
			p = i * j;
			std::memcpy(data1,data2,sizeof(data2));
			for (d = MAX_VALUE ; d >= -MAX_VALUE ; --d)
			{
				v2[d] = v1[d] + v1[d - p] + v1[d + p];
				v2[d] %= MOD;
			}
		}
}

int main (void)
{
	std::freopen("diamant.in","r",stdin);
	std::freopen("diamant.out","w",stdout);
	std::scanf("%d%d%d",&n,&m,&x);
	std::fclose(stdin);
	if (x > MAX_VALUE)
	{
		std::printf("0\n");
		goto Skip;
	}
	dynamic();
	std::printf("%d\n",v2[x]);
	Skip :
	std::fclose(stdout);
	return 0;
}