Submission #1267807

#TimeUsernameProblemLanguageResultExecution timeMemory
1267807silentloopShortcut (IOI16_shortcut)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll find_shortcut(int n, vector<int> l, vector<int> d, int c) { vector<ll> x(n); x[0] = 0; for (int i = 0; i < n - 1; i++) { x[i + 1] = x[i] + l[i]; } vector<ll> left_max(n, 0); for (int a = 0; a < n; a++) { ll max_left = 0; for (int i = 0; i < a; i++) { max_left = max(max_left, (ll)d[i] + (x[a] - x[i])); } left_max[a] = max_left; } vector<ll> right_max(n, 0); for (int b = 0; b < n; b++) { ll max_right = 0; for (int i = b + 1; i < n; i++) { max_right = max(max_right, (ll)d[i] + (x[i] - x[b])); } right_max[b] = max_right; } ll ans = LLONG_MAX; for (int a = 0; a < n; a++) { for (int b = a + 1; b < n; b++) { ll D = x[b] - x[a]; ll S = D + c; ll left_branch = (a > 0) ? left_max[a] : 0; ll right_branch = (b < n - 1) ? right_max[b] : 0; int m = b - a + 1; vector<ll> p(m); for (int k = 0; k < m; k++) { p[k] = x[a + k] - x[a]; } vector<ll> temp(m, 0); for (int u = 0; u < m; u++) { ll max_dist = d[a + u]; deque<int> dq; for (int v = 0; v < m; v++) { ll dist = min(abs(p[u] - p[v]), S - abs(p[u] - p[v])); ll val = d[a + v] + dist; while (!dq.empty() && val >= d[a + dq.back()] + dist) { dq.pop_back(); } dq.push_back(v); } temp[u] = d[a + u] + (dq.empty() ? 0 : d[a + dq.front()] + min(abs(p[u] - p[dq.front()]), S - abs(p[u] - p[dq.front()]))); } ll cycle_diam = 0; for (int u = 0; u < m; u++) { cycle_diam = max(cycle_diam, temp[u]); } ll cross_left = 0, cross_right = 0; for (int u = 0; u < a; u++) { cross_left = max(cross_left, (ll)d[u] + min(x[a] - x[u], x[b] - x[u] + c)); } for (int u = b + 1; u < n; u++) { cross_right = max(cross_right, (ll)d[u] + min(x[u] - x[b], x[u] - x[a] + c)); } ll total_diam = max({left_branch, right_branch, cycle_diam, cross_left, cross_right}); ans = min(ans, total_diam); } } return ans; }

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...