Submission #906514

#TimeUsernameProblemLanguageResultExecution timeMemory
906514vjudge1Shortcut (IOI16_shortcut)C++17
23 / 100
2037 ms916 KiB
#include "shortcut.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx,avx2,fma") using namespace std; using vi = vector<int>; using ll = long long; ll find_shortcut(int n, vi l, vi d, int c) { vector<ll> sl; for(int i = 0; i < n - 1; ++i) { sl.push_back(l[i]); if(i) sl[i] += sl[i - 1]; } auto dist_direct = [&](int u, int v) { if(u > v) swap(u, v); if(!v) return 0ll; if(u) return sl[v - 1] - sl[ u - 1 ]; else return sl[v - 1]; }; vector<vector<ll> > DD(n, vector(n, 0ll)); for(int i = 0; i < n; ++i) for(int j = 0; j < n; ++j) DD[i][j] = dist_direct(i, j); auto dist = [&](int u, int v, int st, int dr) { /// (st, dr) express line ll re = DD[u][v]; re = min(re, DD[u][st] + DD[dr][v] + c); // re = min(re, DD[u][dr] + DD[st][v] + c); return re + d[u] + d[v]; }; ll re = 1e18; auto simu = [&](int st, int dr, ll rec, int &ri, int &rj) { ll cre = dist(ri, rj, st, dr); //if(cre > rec) return cre; for(int i = 0; i < n; ++i) for(int j = i + 1; j < n; ++j) { ll val = dist(i, j, st, dr); if(val > cre) { ri = i; rj = j; cre = val; } //if(cre > rec) return cre; /// merge cu cautarea ternara? } return cre; }; vector<pair<int, int> > O; int ri = 0, rj = 1; for(int st = 0; st < n; ++st) { int l = st + 1, r = n - 1; while(l + 3 < r) { int m1 = (2 * l + r) / 3, m2 = (2 * r + l) / 3; auto c1 = simu(st, m1, re, ri, rj); auto c2 = simu(st, m2, re, ri, rj); re = min(re, c1); re = min(re, c2); if(c1 == c2) { auto r1 = simu(st, r, re, ri, rj); re = min(r1, re); --r; continue; } if(c1 > c2) { l = m1; } else r = m2; } for(int dr = l; dr <= r; ++dr) { auto cre = simu(st, dr, re, ri, rj); re = min(re, cre); } } return re; }
#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...