Cod sursa(job #538220)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 20 februarie 2011 21:45:56
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<iostream.h>
#include<fstream.h>
void quicksort(float a[],int b[], int c[], int x, int y)
{
	int i,j,d;
	float D,piv;
	i=x; j=y;
	piv=a[(x+y)/2];
	while (i <= j) 
		{
			while(a[i]<piv)
				i++;
			while(a[j]>piv)
				j--;
			if (i <= j) 
				{
					D=a[i];
					a[i]=a[j];
					a[j]=D;
					d=b[i];
					b[i]=b[j];
					b[j]=d;
					d=c[i];
					c[i]=c[j];
					c[j]=d;
					i++;
					j--;
				}
		}
	if(x<j)
		quicksort(a,b,c,x,j);
	if(i<y)
		quicksort(a,b,c,i,y);
}
int main()
{
	fstream f("energii.in", ios::in);
	fstream g("energii.out", ios::out);
	int G,W,i,S;
	f>>G>>W;
	int E[G+1],C[G+1];
	for(i=1;i<=G;i++)
		f>>E[i]>>C[i];
	for(S=0,i=1;i<=G;i++)
		S=S+E[i];
	if(S<W)
		g<<"-1";
	else if(S==W)
		{
			for(i=1,S=0;i<=G;i++)
				S=S+C[i];
			g<<S;
		}
	else
		{
			float r[G+1];
			for(i=1;i<=G;i++)
				r[i]=E[i]/C[i]*1.;
			quicksort(r,E,C,1,G);
			for(i=1,S=0;(i<=G) && (S<W);i++)
				S=S+C[i];
			g<<S;
		}
}