Cod sursa(job #146072)

Utilizator ZweisteinAdrian VELICU Zweistein Data 1 martie 2008 09:59:39
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <memory.h>
int main (void) {
	FILE * fi = fopen("diamant.in","rt");
	FILE * fo = fopen("diamant.out","wt");

	const long NMAX=80000;
	const long pivot=NMAX/2;
	long x, n, m;
	long var[NMAX], vars=0;
	fscanf(fi,"%ld %ld %ld",&x,&n,&m);
	for (long i=1; i<=n; i++) for (long j=1; j<=m; j++) {
		long prod=i*j;
		var[vars]=prod;
		vars++;
	};
	
	long cur[NMAX], noo[NMAX];
	memset(cur,0,sizeof(cur));
	memset(noo,0,sizeof(noo));

	cur[pivot]=1; noo[pivot]=1;
	for (long i=0; i<vars; i++) {
		for (long j=1; j<NMAX; j++)
			if (cur[j]!=0) 
				if ((j+var[i]>0) && (j+var[i]<NMAX)) {
//					printf("in %ld am ajuns din %ld cu var %ld [aveam %ld, acum avem %ld]\n",j+var[i]-pivot,j-pivot,var[i],noo[j+var[i]],cur[j]);
					noo[j+var[i]]+=cur[j];
				};
		for (long j=1; j<NMAX; j++)
			if (cur[j]!=0) 
				if ((j-var[i]>0) && (j-var[i]<NMAX)) {
//					printf("in %ld am ajuns din %ld cu var %ld [aveam %ld, acum avem %ld]\n",j-var[i]-pivot,j-pivot,-var[i],noo[j-var[i]],cur[j]);
					noo[j-var[i]]+=cur[j];
				};
//		printf("---["); for (long k=pivot-5; k<=pivot+5; k++) printf("%ld ",noo[k]); printf("]---\n");
		memcpy(cur,noo,sizeof(cur));
	}
	fprintf(fo,"%ld\n",cur[pivot+x]);

	fclose(fi); fclose(fo);
	return 0;
};