Submission #1242809

#TimeUsernameProblemLanguageResultExecution timeMemory
1242809Mousa_AboubakerBoxes with souvenirs (IOI15_boxes)C++20
100 / 100
348 ms196256 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; long long delivery(int N, int K, int L, int p[]) { auto dis = [&](int l, int r) -> int { int res = min(abs(l - r), L - abs(l - r)); return res; }; vector<long long> dp1(N); for(int i = 0; i < K; i++) dp1[i] = p[i] * 2; for(int i = K; i < N; i++) dp1[i] = dp1[i - K] + p[i] * 2; vector<long long> dp2(N); for(int i = N - 1; i >= N - K; i--) dp2[i] = (L - p[i]) * 2; for(int i = N - K - 1; i >= 0; i--) dp2[i] = dp2[i + K] + (L - p[i]) * 2; long long res = 9e18; for(int i = 0; i + K - 1 < N; i++) { if(dis(0, p[i]) == p[i] and dis(0, p[i + K - 1]) == L - p[i + K - 1]) { long long d1 = (i ? dp1[i - 1] : 0); long long d2 = (i + K - 1 != N - 1 ? dp2[i + K] : 0); res = min(res, d1 + d2 + L); } } for(int i = 0; i + 1 < N; i++) res = min(res, dp1[i] + dp2[i + 1]); res = min(res, dp1[N - 1]); res = min(res, dp2[0]); return res; }
#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...