Submission #1080431

#TimeUsernameProblemLanguageResultExecution timeMemory
1080431ArturgoFire (BOI24_fire)C++14
100 / 100
669 ms113920 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int DEBUT = -1; const int FIN = 1; struct Event { int pos, id, type, data; }; bool operator < (const Event& a, const Event& b) { if(a.pos == b.pos) return a.type < b.type; return a.pos < b.pos; } int nbInters, nbCoords; int nbProjs = 0; vector<pair<int, int>> inters; vector<Event> events; void ajoute_inter(int deb, int fin) { inters.push_back({deb, fin}); events.push_back({deb, nbProjs, DEBUT, fin}); events.push_back({fin, nbProjs, FIN, -1}); nbProjs++; } signed main() { ios_base::sync_with_stdio(false); cin >> nbInters >> nbCoords; for(int iInter = 0;iInter < nbInters;iInter++) { int deb, fin; cin >> deb >> fin; if(fin < deb) fin += nbCoords; ajoute_inter(deb, fin); ajoute_inter(deb + nbCoords, fin + nbCoords); } sort(events.begin(), events.end()); vector<vector<int>> suivs(nbProjs, vector<int>(20, -1)); pair<int, int> meilleureFin = {-1, -1}; // pos, id for(Event& ev : events) { if(ev.type == DEBUT) { if(ev.data > meilleureFin.first) { meilleureFin.first = ev.data; meilleureFin.second = ev.id; } } else if(ev.type == FIN) { if(meilleureFin.first > ev.pos) { suivs[ev.id][0] = meilleureFin.second; } } } for(int puis = 1;puis < 20;puis++) { for(int iProj = 0;iProj < nbProjs;iProj++) { if(suivs[iProj][puis - 1] != -1) { suivs[iProj][puis] = suivs[suivs[iProj][puis - 1]][puis - 1]; } } } int minSelects = 1e9; for(int iProj = 0;iProj < nbProjs;iProj++) { int debActuel = inters[iProj].first; int nbSelects = 1; int iFin = iProj; for(int puis = 19;puis >= 0;puis--) { if(suivs[iFin][puis] == -1) continue; int finActuel = inters[suivs[iFin][puis]].second; if(finActuel < debActuel + nbCoords) { nbSelects += (1 << puis); iFin = suivs[iFin][puis]; } } if(suivs[iFin][0] != -1) { minSelects = min(minSelects, nbSelects + 1); } } if(minSelects == 1e9) cout << -1 << endl; else cout << minSelects << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...