Cod sursa(job #49924)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 6 aprilie 2007 16:29:07
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

using namespace std;

int An[1<<16];
int Ap[1<<16];

int Bn[1<<16];
int Bp[1<<16];

int i,j,n,m,k,hi;

#define A(i) (((i)<0)?(An[-(i)]):(Ap[(i)]))
#define B(i) (((i)<0)?(Bn[-(i)]):(Bp[(i)]))

#define li -50000
#define ls 50000

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

	scanf("%d%d%d",&n,&m,&k);
	if ((k>ls)||(k<li))
	{
		printf ("0\n");
		return 0;
	}
	A(0)=1,hi=0;

	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
		{
			memcpy(Bn,An,sizeof(An));
			memcpy(Bp,Ap,sizeof(Bp));
			//+
			for (int t=hi;t>=-hi;t--)
			{
				A(t)=B(t-i*j)+B(t)+B(t+i*j);
				A(t)%=10000;
			}
			hi+=i*j;
		}
	
	printf("%d\n",A(k));

	return 0;
}