Cod sursa(job #70366)

Utilizator alex23alexandru andronache alex23 Data 5 iulie 2007 17:28:07
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <conio.h>


struct alfa{
int x,y;
};

alfa c[1000];
int i,j,k,g,w,a,b,s,p,n,aux;


int main()
{FILE *fin,*fout;

clrscr();
fin=fopen("energii.in","r");
fscanf(fin,"%d",&g);
fscanf(fin,"%d",&w);
for (i=1;i<=g;i++)
  {fscanf(fin,"%d %d",&a,&b);
  j=1;
  while ((c[j].y<=b)&&(j<=i-1)) j++;
  for (k=i;k>j;k--)
       {c[k].x=c[k-1].x;
	c[k].y=c[k-1].y;
	}
  c[j].x=a;
  c[j].y=b;
  }
fclose(fin);

/*
for (i=1;i<=g;i++)
  printf("%d %d ",c[i].x,c[i].y);
   */

s=0;i=1;p=0;
while ((s<w) && (i<=g))
 {s+=c[i].x;
  p+=c[i].y;
  i++;
  }

fout=fopen("energii.out","w");


if (s<w) fprintf(fout,"%d",-1);
     else if (s==w) fprintf(fout,"%d",p);
	       else {i--;
                     n=i;
		     a=0;
		     while (a==0)
		     {a=1;
		      for (i=1;i<=n-1;i++)
			 for (j=i+1;j<=n;j++)
			     if (c[i].y>c[j].y)
					      {aux=c[i].x;
					       c[i].x=c[j].x;
					       c[j].x=aux;
					       aux=c[i].y;
					       c[i].y=c[j].y;
					       c[j].y=aux;
					       a=0;
					       }
		      }

		      i=0;
		      while (s-c[i].x>=w)
		      if (s-c[i].x>=w)  {s=s-c[i].x; p=p-c[i].y;i++;}

		      fprintf(fout,"%d",p);
		      }
fclose(fout);



}