Cod sursa(job #34680)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 21 martie 2007 10:26:22
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <stdio.h>
#include <string.h>
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define nmax 65536
#define MOD 10000

int n,m,S;
int A[2*nmax],B[2*nmax];

int main()
{
	int i,j,x,ii,a,b;
	freopen("diamant.in","r",stdin);
	freopen("diamant.out","w",stdout);
	scanf("%d %d %d",&n,&m,&S);
	if(S>nmax||-S>nmax)
	{
		printf("0\n");
		return 0;
	}
	A[nmax]=1;
	a=b=nmax;
	FOR(i,1,n+1) FOR(j,1,m+1)
	{
		x=i*j;
		memcpy(B+a,A+a,(b-a+1)<<2);
		FOR(ii,a,b+1)
		{
			A[ii+x]+=B[ii],A[ii-x]+=B[ii];
			if(A[ii+x]>=MOD)
				A[ii+x]-=MOD;
			if(A[ii-x]>=MOD)
				A[ii-x]-=MOD;
		}
		a-=x,b+=x;
	}
	printf("%d\n",A[S+nmax]);
	return 0;
}