Cod sursa(job #3210238)

Utilizator danyyyDaniel danyyy Data 5 martie 2024 16:23:00
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

struct oaia
{
    int dist, lana;
};

bool cmp(oaia x, oaia y)
{
    return (x.dist > y.dist);
}

int main()
{
    ifstream in("lupu.in");
    ofstream out("lupu.out");
    int n, dist_max, dist_cresc;
    in >> n >> dist_max >> dist_cresc;
    vector <oaia> v(n);
    for (int i = 0; i < n; i++)
    {
        in >> v[i].dist >> v[i].lana;
    }
    sort(v.begin(), v.end(), cmp);
    priority_queue <int, vector <int>, greater <int>> preselectate;
    int timp = 0;
    long long total = 0;
    for (auto oa: v)
    {
        if (oa.dist + timp * dist_cresc <= dist_max)
        {
            total += oa.lana;
            preselectate.push(oa.lana);
            timp++;
        }
        else
        {
            ///oa e mai buna ca cea mei proasta preselectata
            if (!preselectate.empty() && oa.lana > preselectate.top())
            {
                total += oa.lana - preselectate.top();
                preselectate.pop();
                preselectate.push(oa.lana);
            }
        }
    }
    out << total << "\n";
    in.close();
    out.close();
    return 0;
}