Submission #241251

#TimeUsernameProblemLanguageResultExecution timeMemory
241251crossing0verShortcut (IOI16_shortcut)C++17
0 / 100
5 ms384 KiB
#include<bits/stdc++.h> #define ll long long #define inf 10000000000 //#include "shortcut.h" using namespace std; ll L[100005],R[100005],mxL[100005],mxR[100005],loc[100005],LFT[100005],RGHT[100005]; ll find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c) { for (int i = 1; i < n-1; i++) L[i] = l[i-1], R[i] = l[i-1]; set<int,greater<int> > g; for (int i = 0; i < n; i++) { if (i == 0) mxL[i] = d[i]; else mxL[i] = max(1ll*d[i],mxL[i-1] + L[i]); if (i != 0) loc[i] = loc[i-1] + L[i]; if (i == 0) LFT[i] = d[i]; else LFT[i] = max(*g.begin() + loc[i] + d[i],LFT[i-1]); g.insert(d[i] - loc[i]); } g.clear(); for (int i = n-1; i > 0; i--) { if (i == n-1) mxR[i] = d[i]; else mxR[i] = max(1ll*d[i],mxR[i+1] + R[i]); if (i == n-1) RGHT[i] = d[i]; else RGHT[i] = max(*g.begin() - loc[i] + d[i],RGHT[i+1]); g.insert(d[i] + loc[i]); } ll ans = inf; for (int i = 1; i < n; i++) { ll length = 0; for (int j = i - 1; j >= 0; j--) { length+= R[j]; ll localMin = mxR[i] + mxL[j] + min(length,1ll*c); ll smallL = 0; for (int k = j+1; k <= i; k++) { smallL += L[k]; localMin = max(localMin,mxL[j] + d[k] + min(smallL,length + c - smallL)); if (k != i) localMin = max(localMin,mxR[i] + d[k] + min(smallL + c,length - smallL)); ll partL = 0; for (int e = j; e < k; e++) { if (e != j) partL += L[e]; localMin = max(localMin,d[e] + d[k] + min(smallL - partL, length + c - (smallL - partL))); } } if (n != 3) ans = min(ans,max({localMin,RGHT[i],LFT[j]})); else if (localMin == 3) return mxR[1]; } } return ans; return 0; }
#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...