Cod sursa(job #3149596)

Utilizator jumper007Raul Butuc jumper007 Data 10 septembrie 2023 13:41:59
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(pair<int, int> a, pair<int, int> b) {
    return (float) a.first / a.second > (float) b.first / b.second;
}

int main() {
    ifstream fin("energii.in");
    ofstream fout("energii.out");

    int G, W;
    fin >> G >> W;

    vector<pair<int, int>> generators(G); // perechi de (energie, cost)

    for (int i = 0; i < G; ++i) {
        fin >> generators[i].first >> generators[i].second;
    }

    sort(generators.begin(), generators.end(), compare);

    int remainingEnergy = W;
    int totalCost = 0;

    for (const auto& gen : generators) {
        int E = gen.first;
        int C = gen.second;

        if (remainingEnergy <= 0) break;

        int times = min(remainingEnergy / E, 1);  // cât de multe ori folosim acest generator
        remainingEnergy -= times * E;
        totalCost += times * C;
    }

    if (remainingEnergy > 0) {
        fout << "-1\n";
    } else {
        fout << totalCost << "\n";
    }

    fin.close();
    fout.close();

    return 0;
}