Cod sursa(job #797048)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 13 octombrie 2012 11:25:32
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<stdio.h>
#define mod 10000

int p[200001],q[200001],V[500],i,j,k,ok,n,m,z;

int *A=p+100000;
int *B=q+100000;

FILE*f=fopen("diamant.in","r");
FILE*g=fopen("diamant.out","w");

int main(){
	fscanf(f,"%d%d%d",&n,&m,&k);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			V[++z]=i*j;
	
	if(k<0){
		ok=1;k*=(-1);
	}
	
	A[0]=1;
	for(i=1;i<=z;i++){
		for(j=(-1)*k-n*m;j<=k+n*m;j++){
			if(A[j]!=0){
				if((j+V[i])<=k+n*m)
					B[j+V[i]]=(A[j+V[i]]+A[j])%mod;
				if((j-V[i])>=(-1)*k-n*m)
					B[j-V[i]]=(A[j-V[i]]+A[j])%mod;
			}
		}
		for(j=(-k);j<=k;j++){
			A[j]=B[j];
			B[j]=0;
		}
	}
	if(ok)
		fprintf(g,"%d",A[k*(-1)]);
	else
		fprintf(g,"%d",A[k]);
	return 0;
}