Cod sursa(job #549476)

Utilizator impulseBagu Alexandru impulse Data 8 martie 2011 16:59:21
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<fstream>
#include<iostream>
#include<map>
#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;
    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);
    map<int, int> r;
    for(int i = 0; i < G -1 ; i++)
    {
        int w = W;
        int min = 0;
        for(int c = i; c < G; c++)
        {
            if(vect[c].enprod >= w)
            {
                w = 0;
                min += vect[c].encost;
                break;
            }
            else
            {
                w -= vect[c].enprod;
                min += vect[c].encost;
            }
        }
        r[min] = w;
    }
    int Min = -1;
    map<int, int>::iterator it;
    for(it = r.begin(); it != r.end(); it++)
        if((*it).second == 0)
            {Min = (*it).first;break;}
    ofstream fout("energii.out");
    fout<<Min;
    fout.close();
    return 0;
}