Submission #568541

#TimeUsernameProblemLanguageResultExecution timeMemory
568541Ooops_sorryJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
441 ms9652 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define ld double #define ll long long mt19937 rnd(51); const int N = 30010, K = 50, INF = 1e9, M = 1e5 + 10; int d[N][K]; signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); #endif // LOCAL ios_base::sync_with_stdio(0); cin.tie(0); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { d[i][j] = INF; } } int n, m; cin >> n >> m; vector<int> b(m), p(m), ans(n, INF); vector<vector<int>> need(n); for (int i = 0; i < m; i++) { cin >> b[i] >> p[i]; need[b[i]].pb(abs(p[i])); } ans[b[0]] = 0; set<array<int, 3>> st; st.insert({0, b[0], -1}); while (st.size() > 0) { auto arr = *st.begin(); st.erase(arr); int v = arr[1], j = arr[2]; if (j == -1) { for (auto to : need[v]) { if (to < K) { if (d[v][to] > ans[v]) { st.erase({d[v][to], v, to}); d[v][to] = ans[v]; st.insert({d[v][to], v, to}); } } else { for (int k = v, add = 0; k < n; k += to, add++) { if (ans[k] > ans[v] + add) { st.erase({ans[k], k, -1}); ans[k] = ans[v] + add; st.insert({ans[k], k, -1}); } } for (int k = v, add = 0; k >= 0; k -= to, add++) { if (ans[k] > ans[v] + add) { st.erase({ans[k], k, -1}); ans[k] = ans[v] + add; st.insert({ans[k], k, -1}); } } } } } else { if (d[v][j] < ans[v]) { st.erase({ans[v], v, -1}); ans[v] = d[v][j]; st.insert({ans[v], v, -1}); } if (v + j < n && d[v + j][j] > d[v][j] + 1) { st.erase({d[v + j][j], v + j, j}); d[v + j][j] = d[v][j] + 1; st.insert({d[v + j][j], v + j, j}); } if (v - j >= 0 && d[v - j][j] > d[v][j] + 1) { st.erase({d[v - j][j], v - j, j}); d[v - j][j] = d[v][j] + 1; st.insert({d[v - j][j], v - j, j}); } } } cout << (ans[b[1]] == INF ? -1 : ans[b[1]]) << 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...