Cod sursa(job #425837)

Utilizator swift90Ionut Bogdanescu swift90 Data 26 martie 2010 10:24:09
Problema Diamant Scor 100
Compilator cpp Status done
Runda Simulare CNITV 2 Marime 0.79 kb
#include<stdio.h>
#define REST 10000
int N,M,X;
int C[2][90000];
int main(){
	freopen("diamant.in","r",stdin);
	freopen("diamant.out","w",stdout);
	int i,j,s=0,smax,k,k1,k2,x,p;
	scanf("%d%d%d",&N,&M,&X);
	for(i=1;i<=N;++i){
		for(j=1;j<=M;++j)
			s+=i*j;
	}
	if(!(s>=X && X>=-s)){
		printf("0\n");
		return 0;
	}
	smax=s*2+2;
	C[0][s]=1;
	k=0;
	for(i=1;i<=N;++i){
		for(j=1;j<=M;++j){
			++k;
			k1=k%2;
			k2=(k-1)%2;
			p=i*j;
			for(x=0;x<=smax;++x)
				C[k1][x]=C[k2][x];
			for(x=0;x<=smax;++x){
				if(C[k2][x]){
					C[k1][x+p]+=C[k2][x];
					if(C[k1][x+p]>=REST)
						C[k1][x+p]-=REST;
					C[k1][x-p]+=C[k2][x];
					if(C[k1][x-p]>=REST)
						C[k1][x-p]-=REST;
				}
			}
		}
	}
	printf("%d\n",C[k1][X+s]);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}