제출 #241221

#제출 시각아이디문제언어결과실행 시간메모리
241221crossing0verShortcut (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]; 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], R[i-1] = l[i]; 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]); } 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]); } ll ans = inf; for (int i = 0; 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++) { if (k != j) smallL += L[k]; localMin = max(localMin,mxL[i] + d[k] + min(smallL,length + c - smallL)); if (k != i) localMin = max(localMin,mxR[i] + d[k] + min(smallL + c,length - smallL)); int 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))); } } ans = min(ans,localMin); } } 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...