Cod sursa(job #2640841)

Utilizator andrei42Oandrei42O andrei42O Data 8 august 2020 16:14:34
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
vector <tuple <int, int, int>> v; // worth, quantity, price
int G, W, best_cost = 100000000;
int main()
{
    f >> G >> W;
    for(int i = 1; i <= G; ++i)
    {
        int q, p;
        f >> q >> p;
        v.push_back(make_tuple(-(q - p), -q, p));
    }
    sort(v.begin(), v.end());
    int actual_value = 0, actual_cost = 0, last = 0;
    for(int i = 0; i < G; ++i)
    {
        int c, x, y;
        tie(c, x, y) = v[i];
        x = -x;
        actual_value += x;
        actual_cost += y;
        if(actual_value >= W)
        {
            if(actual_value == W)
            {
                if(best_cost > actual_cost)
                    best_cost = actual_cost;
            }
            else
            {
                tie(c, x, y) = v[last];
                x = -x;
                last++;
                actual_value -= x;
                actual_cost -= y;
            }
        }
    }
    if(best_cost == 100000000)
        g << -1;
    else
        g << best_cost;
    return 0;
}