Cod sursa(job #51877)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 16 aprilie 2007 23:19:43
Problema Diamant Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#define fin  "diamant.in"
#define fout "diamant.out"
#define Smax 99226
#define Mod  10000

int s1[2*Smax],s2[2*Smax];
int N,M,X;

#define s1 (s1 + Smax) 
#define s2 (s2 + Smax)

int main() {
int i,j,k,val;
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);
	
	scanf("%d%d%d",&N,&M,&X);

	s1[0]=1;

	for (i=1;i<=N;++i)
		for (j=1;j<=M;++j) {
			val=i*j;
			for (k=-Smax+1;k<Smax;++k)
				if (k-val>-Smax) {
					s2[k]=s2[k]+s1[k-val];
					if (s2[k]>=Mod)
						s2[k]-=Mod;
				}

			val*=-1;
			
			for (k=-Smax+1;k<Smax;++k)
				if (k-val<Smax) {
					s2[k]+=s1[k-val];
					if (s2[k]>=Mod)
						s2[k]-=Mod;
				}
			
			for (k=-Smax+1;k<Smax;++k) {
				s1[k]+=s2[k];
				if (s1[k]>=Mod)
					s1[k]-=Mod;
				s2[k]=0;
			}
		}

	if (X<=-Smax || X>=Smax)
		printf("0\n");
	else
		printf("%d\n",s1[X]);

	fclose(stdin); fclose(stdout);

	return 0;
		
}