Cod sursa(job #675667)

Utilizator octavianOctavian Crintea octavian Data 7 februarie 2012 22:17:50
Problema Energii Scor 45
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXG 1000

typedef struct {
    short EG, CG;
} energie;

int cmp(const void *a, const void *b) {
    energie x = *(energie *)a, y = *(energie *)b;

    return x.CG*y.EG - x.EG*y.CG; // Compar costul unitatii de energie
}                                 // x.CG/x.EG cu costul unitatii y.CG/y.EG

int main() {
    FILE *fin = fopen("energii.in", "r"), *fout = fopen("energii.out", "w");
    energie g[MAXG];
    short G, W, W1, i;
    long C1;

    fscanf(fin, "%hd%hd", &G, &W);
    for (i = 0; i < G; i++) {
        fscanf(fin, "%hd%hd", &g[i].EG, &g[i].CG);
    }

    qsort(g, G, sizeof(energie), cmp); // Sortez crescator dupa pretul unitatii

    for (i = W1 = C1 = 0; i < G && W1 < W; i++) {
        W1 += g[i].EG;
        C1 += g[i].CG;
    }

    fprintf(fout, "%ld", W1 < W ? -1 : C1);

    fclose(fin);
    fclose(fout);

    return 0;
}