Volta.guideVolta.guide
Home
Introduzione
Materiale
Risorse
Algobadge
Home
Introduzione
Materiale
Risorse
Algobadge
  • Reading papers

Reading papers

Link: https://training.olinfo.it/task/ois_reading Fonte: OIS 2022 Final Round

Categoria

greedy, stl

Carino

Hint 1:

Parti dall'ultimo giorno.


Sketch di soluzione:

Decidi cosa leggere ogni giorno a partire dall'ultimo giorno. Per decidere ti tieni una priority_queue con gli P_i. All'inizio ci saranno solo gli articoli con D_i = -1, via via che si va avanti si aggiungono gli altri articoli.


Soluzione:
#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, L; cin >> N >> L;
  vector<vector<int>> A(L);
  priority_queue<int> q;
  for (int i = 0, p, d; i < N; i++) {
    cin >> p >> d;
    A[((d+L)%L)].push_back(p);
  }
  int risposta = 0;
  for (int i = L-1; i >= 0; i--) {
    for (int j: A[i]) {
      q.push(j);
    }
    if (!q.empty()) {
      risposta += q.top();
      q.pop();
    }
  }
  cout << risposta << '\n';
  return 0;
}

Last Updated:
Contributors: nik-din