Submission #1280890

#TimeUsernameProblemLanguageResultExecution timeMemory
1280890SSKMFJakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
256 ms327680 KiB
#include <bits/stdc++.h> using namespace std; vector < pair <int , int> > adiacenta[60001]; int distanta[60001]; int main () { ios :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int numar_noduri_1 , numar_noduri_2; cin >> numar_noduri_1 >> numar_noduri_2; for (int indice = 1 ; indice <= numar_noduri_2 ; indice++) { int inceput , termen; cin >> inceput >> termen; inceput++; for (int nod = inceput ; nod <= numar_noduri_1 ; nod += termen) { adiacenta[indice + numar_noduri_1].emplace_back(nod , (nod - inceput) / termen); } for (int nod = inceput - termen ; nod > 0 ; nod -= termen) { adiacenta[indice + numar_noduri_1].emplace_back(nod , (inceput - nod) / termen); } adiacenta[inceput].emplace_back(indice + numar_noduri_1 , 0); } for (int indice = 1 ; indice <= numar_noduri_1 + numar_noduri_2 ; indice++) { distanta[indice] = INT32_MAX; } priority_queue < pair <int , int> > candidati; candidati.emplace(distanta[numar_noduri_1 + 1] = 0 , numar_noduri_1 + 1); while (!candidati.empty()) { const int nod = candidati.top().second; if (distanta[nod] != -candidati.top().first) { candidati.pop(); continue; } candidati.pop(); for (auto& vecin : adiacenta[nod]) { if (distanta[vecin.first] > distanta[nod] + vecin.second) { candidati.emplace(-(distanta[vecin.first] = distanta[nod] + vecin.second) , vecin.first); } } } cout << (distanta[numar_noduri_1 + 2] == INT32_MAX ? -1 : distanta[numar_noduri_1 + 2]); 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...