Cod sursa(job #2824336)

Utilizator AndreiP15Andrei Enea AndreiP15 Data 1 ianuarie 2022 19:04:07
Problema Lupul Urias si Rau Scor 44
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <queue>
#include <algorithm>

using namespace std;

const int Nmax = 100005;

priority_queue<int> Q;

struct Oaie {
    int lana, timp;
    bool operator < (const Oaie &o) {
        return timp < o.timp;
    }
};
Oaie oi[Nmax];

    bool comp(Oaie a, Oaie b)
    {
          if(a.timp<b.timp) return 1;
          return 0;
    }


int main() {
    int n, X, L;
    long long sol = 0;
    ifstream fin("lupu.in");
    ofstream fout("lupu.out");
    fin >> n >> X >> L;
    for(int i = 1; i <= n; i++) {
        int dist;
        fin >> dist >> oi[i].lana;
        oi[i].timp = (X - dist) / L;
    }


   // sort(oi + 1, oi + n + 1);


   //sort(oi + 1, oi + n + 1, comp);

 bool sortat;
do
{
  sortat = true;
  for(int i = 1 ; i < n ; i ++)
    if(oi[i].timp > oi[i+1].timp)
   {
      int aux = oi[i].timp;
      oi[i].timp = oi[i+1].timp;
      oi[i+1].timp = aux;
        int aux2 = oi[i].lana;
      oi[i].lana = oi[i+1].lana;
      oi[i+1].lana = aux2;
     sortat = false;
    }
}
while(!sortat);

    int p = n, T = oi[n].timp;

    while(T >= 0) {
        while(p > 0 && oi[p].timp >= T) {
            Q.push(oi[p].lana);
            p--;
        }
        if(!Q.empty()) {
            sol += Q.top();
            Q.pop();
        }
        T--;
    }

    fout << sol;
    return 0;
}