Submission #889179

#TimeUsernameProblemLanguageResultExecution timeMemory
889179Ghulam_JunaidShortcut (IOI16_shortcut)C++17
0 / 100
1 ms2396 KiB
#include <bits/stdc++.h> // #include "grader.cpp" using namespace std; typedef long long ll; const int N = 3e3 + 10; ll dist[N], initially[N][N], tmp[N][2], pmx[N], smx[N]; ll distance(ll u, ll v){ if (u > v) swap(u, v); return dist[v] - dist[u]; } ll find_shortcut(int n, vector<int> l, vector<int> d, int c){ dist[0] = 0; for (ll i=1; i<n; i++) dist[i] = dist[i - 1] + l[i - 1]; for (ll u = 0; u < n; u++){ for (ll v = 0; v < n; v++){ if (u == v) continue; initially[u][v] = distance(u, v) + d[u] + d[v]; pmx[max(u, v)] = max(pmx[max(u, v)], initially[u][v]); smx[min(u, v)] = max(smx[min(u, v)], initially[u][v]); } } ll diam = 1e18; for (ll u = 0; u < n; u++){ ll midmx = 0; for (ll v = u + 1; v < n; v++){ // express line (u, v) // if (u != 7 or v != 8) continue; ll mx[4] = {0}; ll ans = 0; for (ll x = 0; x < n; x++){ if (x <= u){ tmp[x][0] = (ll)d[x] + distance(x, u); mx[0] = max(mx[0], tmp[x][0]); } else if (u < x and x < v){ tmp[x][0] = (ll)d[x] + min(distance(x, u), distance(x, v) + c); tmp[x][1] = (ll)d[x] + min(distance(x, v), distance(x, u) + c); mx[1] = max(mx[1], tmp[x][0]); mx[2] = max(mx[2], tmp[x][1]); } else if (v <= x){ tmp[x][1] = (ll)d[x] + distance(x, v); mx[3] = max(mx[3], tmp[x][1]); } } for (ll x = u + 1; x < v - 1; x++){ ll mind = distance(x, v - 1); mind = min(mind, distance(x, u) + c + distance(v - 1, v)); midmx = max(midmx, mind + d[v - 1] + (ll)d[x]); } ans = max(ans, pmx[u]); ans = max(ans, midmx); ans = max(ans, smx[v]); ans = max(ans, mx[0] + mx[3] + min((ll)c, distance(u, v))); ans = max(ans, mx[0] + mx[1]); ans = max(ans, mx[2] + mx[3]); // ans = max(ans, mx[3] + d[v]); // ans = max(ans, mx[2] + d[v]); // ans = max(ans, min(distance(u, v), c) + mx[0] + d[v]); // cout << u << " " << v << " " << mx[0] << " " << mx[1] << " " << mx[2] << " " << mx[3] << endl; diam = min(diam, ans); // if (ans == 100) cout << u << " ---- " << v << endl; } } return diam; }
#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...