Cod sursa(job #1313566)

Utilizator savigunFeleaga Dragos-George savigun Data 10 ianuarie 2015 20:46:13
Problema Energii Scor 45
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<stdlib.h>

typedef struct
{
	int cost,pow;
	float ef;
}generator;

int main()
{
	int g,e,i,j,p=0,c=0,q=-1,k=0;
	generator *gen,aux;
	FILE *f,*f2;
	if((f=fopen("energii.in","rt"))==NULL)
		return -1;
	if((f2=fopen("energii.out","wt"))==NULL)
		return -1;
	fscanf(f,"%d %d",&g,&e);
	gen=(generator*)calloc(g,sizeof(generator));
	for(i=0;i<g;i++)
		fscanf(f,"%d %d",&gen[i].pow,&gen[i].cost);
	for(i=0;i<g;i++)
		gen[i].ef=(float)gen[i].cost/(float)gen[i].pow;
	for(i=0;i<g;i++)
		for(j=i+1;j<g;j++)
			if(gen[i].ef>gen[j].ef)
				{
					aux=gen[i];
					gen[i]=gen[j];
					gen[j]=aux;
				}
	for(i=0;i<g;i++)
		if(e>p)
			{
				k++;
				p=p+gen[i].pow;
				c=c+gen[i].cost;
			}
		else
			break;
	//for(i=0;i<g;i++)
	//	printf("%d %d %.2f\n",gen[i].pow,gen[i].cost,gen[i].ef);
	for(i=k-1;i>=0;i--)
		if(p-gen[i].pow>=e)
			{
				p=p-gen[i].pow;
				c=c-gen[i].cost;
			}
		else
			break;
	if(e>p)
		fprintf(f2,"%d",q);
	else
		fprintf(f2,"%d",c);
	free(gen);
	fclose(f);
	fclose(f2);
	return 0;
}