Cod sursa(job #43663)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 30 martie 2007 12:50:44
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#define PIVOT 50000

int main(void)
{
int n,m;
long int x;
int s[PIVOT*2];
int s2[PIVOT*2];
FILE *f;
long i,j,e;
int pas=0;

//citeste datele de intrare
f=fopen("diamant.in","rt");
fscanf(f,"%d %d %ld",&n,&m,&x);
fclose(f);

//seteaza vectorul
for(i=0;i<PIVOT*2;i++)
  {s[i]=0;s2[i]=0;}

//face toate variantele de monede
//presupunem ca putem obine suma 0
s[PIVOT]=1;

for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
	{
	pas+=1;

	//adauga moneda i*j
	for(e=0;e<PIVOT*2;e++)
	  if((s[e]!=0))
		{
		s2[e-i*j]+=s[e];
		s2[e+i*j]+=s[e];

		s2[e-i*j]%=10000;
		s2[e+i*j]%=10000;
		}
	//aduna sumele nou obtinute
	for(e=0;e<PIVOT*2;e++)
	  {
	  if(s2[e]!=0) s[e]+=s2[e];
	  s2[e]=0;

	  s[e]%=10000;
	  }
	}
//afiseaza solutia
f=fopen("diamant.out","wt");
fprintf(f,"%d\n",s[PIVOT+x]);
fclose(f);


//sf
return 0;
};