Submission #1137455

#TimeUsernameProblemLanguageResultExecution timeMemory
1137455gygShortcut (IOI16_shortcut)C++20
0 / 100
0 ms328 KiB
#include "shortcut.h" #include <bits/stdc++.h> using namespace std; #define int long long #define arr array #define vec vector #define pii pair<int, int> #define fir first #define sec second const int N = 3e2 + 5; int n, d; arr<int, N> ext; arr<vec<pii>, N> adj; arr<arr<int, N>, N> dst; void dfs(int u, int src, int pr = 0) { for (pii x : adj[u]) if (x.fir != pr) dst[src][x.fir] = dst[src][u] + x.sec, dfs(x.fir, src, u); } void dst_cmp() { for (int u = 1; u <= n; u++) dfs(u, u); } vec<vec<int>> rq; bool chck(int mn) { for (int u = 1; u <= n; u++) if (ext[u] > mn) return false; rq.clear(); for (int u = 1; u <= n; u++) { vec<int> fr; for (int v = 1; v <= n; v++) if (v != u && dst[u][v] + ext[u] + ext[v] > mn) fr.push_back(v); if (fr.empty()) continue; if (fr[0] < u && fr.back() > u) return false; if (fr.back() < u) { int v = fr.back(); rq.push_back({v, u, dst[u][v] + ext[u] + ext[v] - mn}); } else { int v = fr[0]; rq.push_back({u, v, dst[u][v] + ext[u] + ext[v] - mn}); } } // for (vec<int> x : rq) cerr << x[0] << " " << x[1] << " " << x[2] << '\n'; int l = 1, r = n, x = 0; for (vec<int> y : rq) l = max(l, y[0]), r = min(r, y[1]), x = max(x, y[2]); // cerr << mn << ": " << l << " " << r << " " << x << '\n'; if (l > r) return false; int sv = max(dst[l][r] - d, 0ll); return (sv >= x); } int srch() { int lw = 1, hg = 1e18; while (lw != hg) { int md = (lw + hg) / 2; if (chck(md)) hg = md; else lw = md + 1; } return lw; } int find_shortcut(signed _n, vec<signed> _edg, vec<signed> _ext, signed _d) { n = _n, d = _d; for (int u = 1; u < n; u++) adj[u].push_back({u + 1, _edg[u - 1]}), adj[u + 1].push_back({u, _edg[u - 1]}); for (int u = 1; u <= n; u++) ext[u] = _ext[u - 1]; dst_cmp(); return srch(); }

Compilation message (stderr)

shortcut.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
shortcut_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...