Cod sursa(job #130436)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 1 februarie 2008 10:40:57
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
long int ge,w,cmin,*e1,*e2,*e3,l1,l3,*c1,*c2,*c3,egi,cgi,i,j,p1,p2,*caux,
se1[5002],se2[5002],se3[5002],sc1[5002],sc2[5002],sc3[5002];
int main()
{
	FILE *f,*g;f=fopen("energii.in","r");g=fopen("energii.out","w");
	fscanf(f,"%ld",&ge);fscanf(f,"%ld",&w);
	e1=se1;e2=se2;e3=se3;
	c1=sc1;c2=sc2;c3=sc3;
	cmin=20000000;
	e1[1]=0;c1[1]=0;l1=1;
	for(i=1;i<=ge;i++)
	{ fscanf(f,"%ld%ld",&egi,&cgi);
	  for(j=1;j<=l1;j++){ e2[j]=e1[j]+egi;c2[j]=c1[j]+cgi;}
	  p1=1;p2=1;
	  while(p1<=l1)
	  { if(e1[p1]<e2[p2]){l3++;e3[l3]=e1[p1];c3[l3]=c1[p1];p1++;}
	    else if(e1[p1]>e2[p2]){l3++;e3[l3]=e2[p2];c3[l3]=c2[p2];p2++;}
	    else {l3++;e3[l3]=e1[p1];c3[l3]=(c1[p1]<c2[p2])?c1[p1]:c2[p2];p1++;p2++;}
	  }
	  while(p2<=l1&&e2[p2]<w){l3++;e3[l3]=e2[p2];c3[p2]=c2[p2];p2++;}
	  while(p2<=l1){cmin=(cmin<=c2[p2])?cmin:c2[p2];p2++;}
	  caux=e1;e1=e3;e3=e2;e2=caux;
	  caux=c1;c1=c3;c3=c2;c2=caux;
	  l1=l3;l3=0;
	}
	if(cmin==20000000)fprintf(g,"-1\n");
	else fprintf(g,"%ld",cmin);
	fcloseall();
	return 0;
}