Pagini recente » Istoria paginii runda/ioit_cazan/clasament | Cod sursa (job #1662193) | Istoria paginii runda/anamorapud/clasament | Istoria paginii runda/rundada/clasament | Cod sursa (job #470298)
Cod sursa(job #470298)
/**
*
* Source: Infoarena
* Title: Energii
* Author: Lazar Pavel
*
**/
#include <stdio.h>
#include <stdlib.h>
struct ENRG{
int eg; // eg - vector cu valoarea energiilor ale generatoarelor
int cg; // cg - costul repornirii generatorului
double fract;
};
void sort( ENRG *vector, int dim ){
int found = 1;
ENRG tmp;
int i;
while( found ){
found = 0;
for( i = 0; i < dim - 1; i++ ){
if( vector[i].fract > vector[i+1].fract ){
tmp = vector[i];
vector[i] = vector[i+1];
vector[i+1] = tmp;
found = 1;
}
}
}
}
void printStruct( ENRG *vect, int dim ){
int i;
for( i = 0; i < dim; i++ ){
printf("%d %d %.3f\n", vect[i].eg, vect[i].cg, vect[i].fract );
}
}
int main(){
FILE *fin = fopen("energii.in","r");
FILE *fout = fopen("energii.out","w");
int g; // g - numarul de generatoare
int w; // w - cantitatea de energie necesara repornirii statiei
fscanf(fin,"%d",&g);
fscanf(fin,"%d",&w);
ENRG *ergVect = (ENRG*)malloc(g*sizeof(ENRG));
int i;
for( i = 0; i < g; i++ ){
fscanf(fin,"%d",&ergVect[i].eg);
fscanf(fin,"%d",&ergVect[i].cg);
ergVect[i].fract = (double)(ergVect[i].cg/(double)ergVect[i].eg);
}
sort(ergVect,g);
//printStruct(ergVect,g);
int sumE = 0;
int cost = 0;
i = 0;
while( sumE < w ){
sumE += ergVect[i].eg;
cost += ergVect[i].cg;
i++;
}
fprintf(fout,"%d",cost);
fclose(fin);
fclose(fout);
return 0;
}