Submission #832461

#TimeUsernameProblemLanguageResultExecution timeMemory
832461maomao90Sky Walking (IOI19_walk)C++17
10 / 100
4046 ms55720 KiB
// I can do all things through Christ who strenghthens me // Philippians 4:13 #include "bits/stdc++.h" #include "walk.h" using namespace std; #define REP(i, j, k) for (int i = j; i < (k); i++) #define RREP(i, j, k) for (int i = j; i >= (k); i--) template <class T> inline bool mnto(T &a, const T b) {return a > b ? a = b, 1 : 0;} template <class T> inline bool mxto(T &a, const T b) {return a < b ? a = b, 1 : 0;} typedef long long ll; typedef long double ld; #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; #define ALL(x) x.begin(), x.end() #define SZ(x) (int) x.size() #define pb push_back typedef vector<int> vi; typedef vector<ii> vii; typedef vector<ll> vll; typedef tuple<int, int, int> iii; typedef tuple<ll, ll, ll> lll; typedef vector<iii> viii; #ifndef DEBUG #define cerr if (0) cerr #endif const int INF = 1000000005; const ll LINF = 1000000000000000005; const int MAXN = 100005; int n, m; vi vy[MAXN]; ll d[MAXN][55]; priority_queue<lll, vector<lll>, greater<lll>> pq; ll min_distance(vi x, vi h, vi l, vi r, vi y, int s, int g) { n = SZ(x), m = SZ(l); REP (i, 0, m) { REP (p, l[i], r[i] + 1) { if (h[p] < y[i]) { continue; } vy[p].pb(i); } } REP (i, 0, n) { REP (j, 0, SZ(vy[i])) { d[i][j] = LINF; } } REP (j, 0, SZ(vy[s])) { d[s][j] = y[vy[s][j]]; pq.push({d[s][j], s, j}); } while (!pq.empty()) { auto [ud, up, ui] = pq.top(); pq.pop(); if (ud != d[up][ui]) { continue; } int id = vy[up][ui]; cerr << up << ' ' << y[id] << ": " << ud << '\n'; REP (j, 0, SZ(vy[up])) { if (mnto(d[up][j], ud + abs(y[id] - y[vy[up][j]]))) { pq.push({d[up][j], up, j}); } } REP (p, l[id], r[id] + 1) { if (h[p] < y[id]) { continue; } REP (j, 0, SZ(vy[p])) { if (y[vy[p][j]] != y[id]) { continue; } if (mnto(d[p][j], ud + abs(x[p] - x[up]))) { pq.push({d[p][j], p, j}); } } } } ll ans = LINF; REP (j, 0, SZ(vy[g])) { mnto(ans, d[g][j] + y[vy[g][j]]); } if (ans == LINF) { return -1; } return ans; }
#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...