Submission #1288166

#TimeUsernameProblemLanguageResultExecution timeMemory
1288166gustavo_dJakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
211 ms294796 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,inline-functions") const int MAXN = 2000; const int MAXM = 30000; bool liberated[MAXN]; int pos[MAXM], jump[MAXM]; vector<int> in[MAXN]; int dist[MAXN][MAXM]; bool vis[MAXN][MAXM]; queue<pair<int, int>> bfs; int n; void liberate(int i, int d) { if (liberated[i]) return; liberated[i] = true; for (int v : in[i]) { if (vis[i][v]) continue; dist[i][v] = d; bfs.push({i, v}); vis[i][v] = true; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int m; cin >> n >> m; for (int i=0; i<m; i++) { cin >> pos[i] >> jump[i]; if (i == 1) continue; in[pos[i]].push_back(i); } liberate(pos[0], 0); while (!bfs.empty()) { auto [p, v] = bfs.front(); // cout << p << ' ' << v << ':' << dist[p][v] << '\n'; bfs.pop(); if (p == pos[1]) { cout << dist[p][v] << '\n'; return 0; } if (p - jump[v] >= 0 and !vis[p-jump[v]][v]) { vis[p-jump[v]][v] = true; dist[p-jump[v]][v] = dist[p][v] + 1; bfs.push({p - jump[v], v}); liberate(p - jump[v], dist[p][v] + 1); } if (p + jump[v] < n and !vis[p+jump[v]][v]) { vis[p+jump[v]][v] = true; dist[p+jump[v]][v] = dist[p][v] + 1; bfs.push({p + jump[v], v}); liberate(p + jump[v], dist[p][v] + 1); } } cout << -1 << '\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...