Cod sursa(job #675978)

Utilizator octavianOctavian Crintea octavian Data 8 februarie 2012 15:24:36
Problema Energii Scor 45
Compilator c Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXG 1000

typedef struct {
    short EG, CG;
} energie;

// Compar costul unitatii de energie x.CG/x.EG cu costul unitatii y.CG/y.EG

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

    return x.CG*y.EG - x.EG*y.CG;
}

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\n", W1 < W ? -1 : C1);

    fclose(fin);
    fclose(fout);

    return 0;
}