Cod sursa(job #35213)

Utilizator raula_sanChis Raoul raula_san Data 21 martie 2007 21:59:50
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#include <cstring>
#include <ctime>

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;

#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()
{
	long t1=clock();

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

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

 long S=0;
    for(i=1;i<=n;i++)
                     for(j=1; j<=m; ++j)
                              S += i*j;
                     
	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=S;t>=-S;t--){
				A(t)=B(t-i*j)+B(t)+B(t+i*j);
				A(t) %= 10000;
			}
		}
	
	printf ("%d\n",A(k));
	return 0;

}