Submission #242971

#TimeUsernameProblemLanguageResultExecution timeMemory
242971neihcr7jJakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
144 ms262148 KiB
#include<bits/stdc++.h> #define oo 1000000000 #define maxm 5000000 #define maxn 50005 #define block 100 using namespace std; typedef long long ll; int n, m; int b[maxn], p[maxn]; vector < pair < int, int > > g[maxm]; int node(int u, int x) {return x * n + u;} int dist[maxm]; queue < int > L[maxn * 10]; int dijkstra() { fill(dist, dist + maxn, oo); dist[b[0]] = 0; L[0].push(b[0]); int M = maxn * 10 - 1; for (int i = 0; i <= M; ++i) while (!L[i].empty()) { int u = L[i].front(); L[i].pop(); if (dist[u] < i) continue; for (auto x : g[u]) { int v = x.first, w = x.second; if (dist[v] > dist[u] + w) { dist[v] = dist[u] + w; if (dist[v] <= M) L[dist[v]].push(v); } } } return (dist[b[1]] == oo ? -1 : dist[b[1]]); } int main(){ #define TASK "ABC" //freopen(TASK".inp", "r", stdin); freopen(TASK".out", "w", stdout); ios_base::sync_with_stdio(0); cin >> n >> m; for (int i = 0; i < m; ++i) cin >> b[i] >> p[i]; for (int j = 1; j <= block; ++j) for (int i = j; i < n; ++i) g[node(i, j)].push_back({node(i - j, j), 1}); for (int j = 1; j <= block; ++j) for (int i = 0; i + j < n; ++i) g[node(i, j)].push_back({node(i + j, j), 1}); for (int i = 0; i < n; ++i) for (int j = 1; j <= block; ++j) g[node(i, j)].push_back({i, 0}); for (int i = 0; i < m; ++i) if (p[i] <= block) g[b[i]].push_back({node(b[i], p[i]), 0}); for (int i = 0; i < m; ++i) if (p[i] > block) for (int j = b[i] % p[i]; j < n; j += p[i]) if (i != j) g[b[i]].push_back({j, abs(j - b[i]) / p[i]}); //for (int i = 0; i < 10; ++i) // for (auto j : g[i]) // cerr << i << ' ' << j.first << ' ' << j.second << '\n'; cout << dijkstra(); 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...