Cod sursa(job #20338)

Utilizator bogdan59Bogdan bogdan59 Data 21 februarie 2007 09:40:11
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>
int g, w;

struct gen{
	int energ, pret;
	float rand;
	}v[1000];
/*----------------------------------------*/
void read();
void schimb(gen &a, gen &b);
void sort();
/*----------------------------------------*/
int main(){

FILE *f=fopen("energii.out","w");
int c=0,o=1, ener=0,i=1, min=6000, max=0;
read();
sort();
while(i<=g){
o=i;
	while(ener<w && o<=g){
	      c+=v[o].pret;
	      ener+=v[o].energ;
	      o++;
	      }
if(c<min && ener>w){min=c;max=ener;}
else if(c<min ener==w){min=c;max=ener;i=g;}

c=0;
ener=0;
i++;
}
if(max>=w)fprintf(f,"%d\n",min);
else fprintf(f,"-1\n");
fclose(f);
return 0;
}

/*----------------------------------------*/
void read(){
int i, energ, cost;
FILE *f=fopen("energii.in","r");
fscanf(f,"%d %d",&g,&w);
for(i=1;i<=g;i++){
	fscanf(f,"%d %d",&energ, &cost);
	v[i].energ=energ;
	v[i].pret=cost;
	v[i].rand=float(energ)/float(cost);
	}
fclose(f);
}

/*----------------------------------------*/
void sort(){
int fleg=1, i;
while(fleg){
	fleg=0;
	for(i=1;i<=g;i++){
		 if(v[i].rand<v[i+1].rand){
				schimb(v[i],v[i+1]);
				fleg=1;
				}
		 else if(v[i].rand==v[i+1].rand && v[i].energ<v[i+1].energ){
				schimb(v[i],v[i+1]);
				fleg=1;
				}
		}
	}
}

/*----------------------------------------*/

void schimb(gen &a, gen &b){
gen aux;
aux=a;
a=b;
b=aux;
}
/*----------------------------------------*/