Cod sursa(job #2839176)

Utilizator db_123Balaban David db_123 Data 25 ianuarie 2022 13:32:24
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <queue>
#include <algorithm>

using namespace std;

const int DIM = 100005;

ifstream cin("lupu.in");
ofstream cout("lupu.out");

struct oaie
{
    long long timp;
    long long lana;
};

long long n, dist, step, i, d, timpRamas, sol;

oaie oi[DIM];

priority_queue<long long> wool;

bool comp(oaie o1, oaie o2)
{
    if (o1.timp < o2.timp)
        return true;
    return false;
}

int main()
{
    cin >> n >> dist >> step;
    for (i = 1; i <= n; i++) {
        cin >> d;
        cin >> oi[i].lana;
        if (d <= dist) {
            if (step == 0)
                oi[i].timp = DIM;
            else {
                oi[i].timp = (dist - d) / step;
                if (oi[i].timp > DIM)
                    oi[i].timp = DIM;
            }
        }
        else
            oi[i].timp = -1;
    }
    sort(oi + 1, oi + n + 1, comp);
    timpRamas = oi[n].timp;
    i = n;
    while (timpRamas >= 0) {
        while (i >= 1 && oi[i].timp == timpRamas) {
            wool.push(oi[i].lana);
            i--;
        }
        if (!wool.empty()) {
            sol += wool.top();
            wool.pop();
        }
        timpRamas--;
    }
    cout << sol;
    cin.close();
    cout.close();
    return 0;
}