Cod sursa(job #130447)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 1 februarie 2008 11:07:19
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
long int ge,w,cmin,*e1,*e2,*e3,l1,l2,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;l2=l1;
	  while(e2[l2]>=w)cmin=(cmin<=e2[l2])?cmin:e2[l2];
	  while(p1<=l1&&p2<=l2)
	  { if(e1[p1]<e2[p2])
	     { if(c1[p1]<cmin)
		{l3++;e3[l3]=e1[p1];c3[l3]=c1[p1];}
	       p1++;
	     }
	    else
	     if(e1[p1]>e2[p2])
	      { if(c2[p2]<cmin)
		 {l3++;e3[l3]=e2[p2];c3[l3]=c2[p2];}
		p2++;
	      }
	    else
	     { if(c1[p1]<cmin||c2[p2]<cmin)
		{l3++;e3[l3]=e1[p1];c3[l3]=(c1[p1]<c2[p2])?c1[p1]:c2[p2];}
		p1++;p2++;
	     }
	  }
	  while(p1<=l1)
	   { if(c1[p1]<cmin)
	     {l3++;e3[l3]=e1[p1];c3[l3]=c1[p1];}
	     p1++;
	   }
	  while(p2<=l2)
	   { if(c2[p2]<cmin)
	      {l3++;e3[l3]=e2[p2];c3[l3]=c2[p2];}
	     p2++;
	   }
	  caux=e1;e1=e3;e3=e2;e2=caux;
	  caux=c1;c1=c3;c3=c2;c2=caux;
	  l1=l3;l2=0;l3=0;
	}
	if(cmin==20000000)fprintf(g,"-1\n");
	else fprintf(g,"%ld",cmin);
	fcloseall();
	return 0;
}