제출 #1256968

#제출 시각아이디문제언어결과실행 시간메모리
1256968xardkodychJakarta Skyscrapers (APIO15_skyscraper)C++20
57 / 100
358 ms309992 KiB
// #pragma optimize("Ofast") #include "bits/stdc++.h" #define all(v) (v).begin(), (v).end() #define pb push_back #define em emplace_back #define mp make_pair #define F first #define S second using namespace std; template<class C> using vec = vector<C>; using vi = vector<int>; using vpi = vector<pair<int, int> >; using pii = pair<int, int>; #ifdef LOCAL const int N = 100; #else const int N = 30001; #endif const int sqr = 170; int cnt = 0; int n, m; int id[sqr][N]; vec<vpi> g; int dijkstra(int s, int t) { vi dp(cnt, INT_MAX); dp[s] = 0; set<pii> q; q.emplace(0, s); while (!q.empty()) { auto [d,v] = *q.begin(); q.erase(q.begin()); for (auto& [to, w] : g[v]) { int relax = d + w; if (dp[to] > relax) { q.erase({dp[to], to}); q.emplace(dp[to] = relax, to); } } } return dp[t]; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 0; i < sqr; i++) { for (int j = 0; j < n; j++) { id[i][j] = cnt++; } } g.resize(cnt); for (int i = 1; i < sqr; i++) { for (int j = 0; j < n; j++) { g[id[i][j]].em(id[0][j], 0); if (j - i >= 0) g[id[i][j]].em(id[i][j - i], 1); if (j + i < n) g[id[i][j]].em(id[i][j + i], 1); } } vi bb(m), pp(m); for (int i = 0; i < m; i++) { int b, p; cin >> b >> p; bb[i] = b; pp[i] = p; if (p >= sqr) { for (int j = b % p; j < n; j += p) { int w = abs(j - b) / p; g[id[0][b]].em(id[0][j], w); } } else { g[id[0][b]].em(id[p][b], 0); } } int ans = dijkstra(id[0][bb[0]], id[0][bb[1]]); if (ans == INT_MAX) { cout << -1 << '\n'; } else { cout << ans << '\n'; } }
#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...