Submission #1322086

#TimeUsernameProblemLanguageResultExecution timeMemory
1322086aaaaaaaaJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
704 ms112284 KiB
#include <bits/stdc++.h> using namespace std; const int mxN = 3e4 + 1; const int inf = 1e9; vector<int> pos[mxN]; int n, m, x, y; bitset<mxN> vis[mxN]; signed main(){ ios::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> m; vector<int> d(m), s(m); for(int i = 0; i < m; ++i){ cin >> d[i] >> s[i]; if(i == 0) x = d[i], y = s[i]; pos[d[i]].push_back(s[i]); } priority_queue<tuple<int, int, int>> pq; pq.push({0, x, y}); vis[x][y] = 1; int ans = inf; while(pq.size()){ auto [dist, id, mov] = pq.top(); pq.pop(); dist = -dist; if(id == d[1]){ ans = min(ans, dist); continue; } for(auto it : pos[id]){ if((id + it) <= (n - 1) && !vis[id + it][it]){ vis[id + it][it] = 1; pq.push({-(dist + 1), id + it, it}); } if((id - it) >= 0 && !vis[id - it][it]){ vis[id - it][it] = 1; pq.push({-(dist + 1), id - it, it}); } } if((id + mov) <= (n - 1) && !vis[id + mov][mov]){ vis[id + mov][mov] = 1; pq.push({-(dist + 1), id + mov, mov}); } if((id - mov) >= 0 && !vis[id - mov][mov]){ vis[id - mov][mov] = 1; pq.push({-(dist + 1), id - mov, mov}); } } if(ans == inf) cout << -1 << "\n"; else cout << ans << "\n"; 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...