Pagini recente » Cod sursa (job #1199179) | Cod sursa (job #699335) | Cod sursa (job #1913457) | Cod sursa (job #2727215) | Cod sursa (job #1313590)
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float cost,pow;
float ef;
}generator;
int main()
{
int g,e,i,j,p1=0,p2=0,c1=0,c2=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,"%f %f",&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++)
for(j=i+1;j<g;j++)
if(gen[i].ef==gen[j].ef)
if(gen[i].pow<gen[j].pow)
{
aux=gen[i];
gen[i]=gen[j];
gen[j]=aux;
}
for(i=0;i<g;i++)
if(e>p1)
{
k++;
p1=p1+gen[i].pow;
c1=c1+gen[i].cost;
}
else
break;
if(p1>e)for(i=k-1;i>=0;i--)
if(p1-gen[i].pow>=e)
{
p1=p1-gen[i].pow;
c1=c1-gen[i].cost;
}
else
break;
k=0;
for(i=0;i<g;i++)
for(j=i+1;j<g;j++)
if(gen[i].ef==gen[j].ef)
if(gen[i].pow>gen[j].pow)
{
aux=gen[i];
gen[i]=gen[j];
gen[j]=aux;
}
for(i=0;i<g;i++)
if(e>p2)
{
k++;
p2=p2+gen[i].pow;
c2=c2+gen[i].cost;
}
else
break;
if(p2>e)for(i=k-1;i>=0;i--)
if(p2-gen[i].pow>=e)
{
p2=p2-gen[i].pow;
c2=c2-gen[i].cost;
}
else
break;
if(c1>c2 && p2>=e)
{c1=c2;p1=p2;}
if(e>p1)
fprintf(f2,"%d",q);
else
fprintf(f2,"%d",c1);
free(gen);
fclose(f);
fclose(f2);
return 0;
}