Cod sursa(job #2284046)

Utilizator AlexGAlexandru Gheorghe AlexG Data 16 noiembrie 2018 17:53:14
Problema Lupul Urias si Rau Scor 48
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <algorithm>

using namespace std;

struct Oaie
{
    int distanta, lana, timp;
    friend istream& operator>>(istream& in, Oaie &o)
    {
        return in >> o.distanta >> o.lana;
    }
    friend bool operator<(Oaie &o1, Oaie &o2)
    {
        return o1.timp < o2.timp;
    }
};

int main()
{
    ifstream fin("lupu.in");
    int n, x, l;
    fin >> n >> x >> l;
    vector<Oaie> oi(n);
    int timpMaxim=0;
    for(int i=0; i<n; ++i)
    {
        fin >> oi[i];
        oi[i].timp = (x - oi[i].distanta) / l;
        if(timpMaxim < oi[i].timp)
            timpMaxim = oi[i].timp;
    }
    sort(oi.rbegin(), oi.rend());
    priority_queue<int> lana;
    int suma = 0, j=0;
    for(int i=timpMaxim; i>=0; --i)
    {
        while(oi[j].timp == i)
        {
            lana.push(oi[j].lana);
            j++;
        }
        if(!lana.empty())
        {
            suma += lana.top();
            lana.pop();
        }
    }
    ofstream fout("lupu.out");
    fout << suma;
    return 0;
}