Submission #109944

#TimeUsernameProblemLanguageResultExecution timeMemory
109944SaboonJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
814 ms85040 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 30000 + 10; const int inf = 1e9; const int T = 10; int b[maxn], p[maxn], dp[maxn * T]; int n, m; vector<pair<int, int> > g[maxn * T]; inline int id(int v, int x){ return v * T + x; } int dijkstra(int v){ for (int i = 0; i < n * T; i++) dp[i] = inf; dp[v] = 0; set<pair<int, int> > s; for (int i = 0; i < n * T; i++) s.insert({dp[i], i}); while (!s.empty()){ int v = (*s.begin()).second; s.erase(s.begin()); if (dp[v] == inf) return -1; if (v == id(b[1], 0)) return dp[v]; if (v % T != 0){ int i = v / T, j = v % T; g[id(i, j)].push_back({id(i, 0), 0}); if (i + j < n) g[id(i, j)].push_back({id(i + j, j), 1}); if (i - j >= 0) g[id(i, j)].push_back({id(i - j, j), 1}); } for (auto edge : g[v]){ int u = edge.first, w = edge.second; if (dp[u] > dp[v] + w){ s.erase({dp[u], u}); dp[u] = dp[v] + w; s.insert({dp[u], u}); } } g[v].clear(); } } int main(){ ios_base::sync_with_stdio(false); cin >> n >> m; for (int i = 0; i < m; i++){ cin >> b[i] >> p[i]; if (p[i] < T) g[id(b[i], 0)].push_back({id(b[i], p[i]), 0}); else{ for (int u = b[i] + p[i]; u < n; u += p[i]) g[id(b[i], 0)].push_back({id(u, 0), (u - b[i]) / p[i]}); for (int u = b[i] - p[i]; u >= 0; u -= p[i]) g[id(b[i], 0)].push_back({id(u, 0), (b[i] - u) / p[i]}); } } cout << dijkstra(id(b[0], 0)) << '\n'; }

Compilation message (stderr)

skyscraper.cpp: In function 'int dijkstra(int)':
skyscraper.cpp:50:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...