Cod sursa(job #1546261)

Utilizator preda.andreiPreda Andrei preda.andrei Data 7 decembrie 2015 21:12:38
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

struct Generator{
    int energie, cost;
    float rata;
};

Generator gen[5001];

int cmp(Generator g1, Generator g2){

    if(g1.rata<g2.rata)
        return 1;
    if(g1.rata>g2.rata)
        return -1;
    return 0;
}

int main()
{
    FILE *fin=fopen("energii.in", "r");
    FILE *fout=fopen("energii.out", "w");

    int n, en, c1, c2, e1, e2;

    fscanf(fin, "%d%d", &n, &en);
    e2=c2=0;
    for(int i=1; i<=n; ++i){
        fscanf(fin, "%d%d", &gen[i].energie, &gen[i].cost);
        gen[i].rata=1.0*gen[i].energie/gen[i].cost;
    }

    for(int i=1; i<n; ++i){
        for(int j=i+1; j<=n; ++j){
            if(cmp(gen[i], gen[j])==1){
                Generator genaux=gen[i];
                gen[i]=gen[j];
                gen[j]=genaux;
            }
        }
    }

    for(int i=1; i<=n; ++i){
        e1=gen[i].energie;
        c1=gen[i].cost;

        //cout << e1 << " " << c1 << "\n";

        if((e1>=e2 && c1<c2) || (e2<en && e1>=en)){
            c2=c1;
            e2=e1;
        }
        else if(e1+e2<=en || (e2<en && e1+e2>=en)){
            e2+=e1;
            c2+=c1;
        }
    }

    if(e2<en)
        fprintf(fout, "-1");
    else fprintf(fout, "%d", c2);

    return 0;
}