Submission #1162217

#TimeUsernameProblemLanguageResultExecution timeMemory
1162217gustavo_dBoxes with souvenirs (IOI15_boxes)C++20
100 / 100
333 ms196172 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = 1e18; ll delivery(int n, int k, int len, int p[]) { ll dpL[n+1]; dpL[0] = 0; ll dpR[n+1]; dpR[0] = 0; for (int i=0; i<=n; i++) { if (i != 0 and i <= k) dpL[i] = 2*p[i-1]; else if (i != 0) dpL[i] = 2*p[i-1] + dpL[i-k]; } for (int j=0; j<=n; j++) { if (j != 0 and j <= k) dpR[j] = 2*(len - p[n-j]); else if (j != 0) dpR[j] = 2LL*(len-p[n-j]) + dpR[j-k]; } int pt = -1; for (int i=0; i<n; i++) { if (p[i] <= len / 2) pt = i; else break; } ll ans = dpL[pt+1] + dpR[n-pt-1]; for (int i=max(0, pt - k - 5); i<=pt+1; i++) { int j = n - i - k; ll tmp = (i + j < n ? len : 0); tmp += dpL[i] + dpR[j]; // cout << i << ' ' << j << ' ' << tmp << endl; ans = min(ans, tmp); } return ans; }
#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...