Cod sursa(job #549447)

Utilizator impulseBagu Alexandru impulse Data 8 martie 2011 16:37:05
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int G,W;
struct generator
{
    double eff;
    int enprod;
    int encost;
};

vector<generator> vect;

bool comp(generator g1, generator g2)
{
    return (g1.eff > g2.eff);
}

int main()
{
    ifstream fin("energii.in");
    fin>>G>>W;
    int W2 = W;
    vect.reserve(G);
    for(int c = 0; c < G; c++)
    {
        generator g;
        fin>>g.enprod;
        fin>>g.encost;
        g.eff = (double)g.enprod / (double)g.encost;
        vect.push_back(g);
    }
    fin.close();
    sort(vect.begin(), vect.end(), comp);
    int min = 0;
    for(int c = 0; c < G; c++)
    {
        if(vect[c].enprod >= W)
        {
            W = 0;
            min += vect[c].encost;
            break;
        }
        else
        {
            W -= vect[c].enprod;
            min += vect[c].encost;
        }
    }
    int min2 = 0;
    for(int c = G; c >= 0; c++)
    {
        if(vect[c].enprod >= W2)
        {
            W2 = 0;
            min2 += vect[c].encost;
            break;
        }
        else
        {
            W2 -= vect[c].enprod;
            min2 += vect[c].encost;
        }
    }
    ofstream fout("energii.out");
    if(W2 != 0 && min > min2)
    {
        fout<<min;
    }
    else
    {
        if(W != 0)
            fout<<"-1";
        else
            fout<<min;
    }
    fout.close();
    return 0;
}