Submission #54590

#TimeUsernameProblemLanguageResultExecution timeMemory
54590aome선물상자 (IOI15_boxes)C++17
10 / 100
2 ms376 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; const int M = 10000005; const long long INF = 1e18; long long f1[M], f2[M], f3[M]; long long delivery(int N, int K, int L, int p[]) { int pos = -1; for (int i = 0; i < N; ++i) { if (p[i] * 2 <= L) pos = i; } int cnt; long long sum; cnt = 0, sum = 0; for (int i = 0; i < K; ++i) { f1[i] = f2[i] = INF; } for (int i = 0; i <= pos; ++i) { ++cnt; if (pos - i + 1 > K) { if (cnt == K) sum += p[i] * 2, cnt = 0; } else { f1[pos - i + 1] = sum; if (i) f1[pos - i + 1] += p[i - 1] * 2; } } f1[0] = sum; if (pos != -1) f1[0] += p[pos] * 2; cnt = 0, sum = 0; for (int i = N - 1; i > pos; --i) { ++cnt; if (i - pos > K) { if (cnt == K) sum += (L - p[i]) * 2, cnt = 0; } else { f2[i - pos] = sum; if (i != N - 1) f2[i - pos] += (L - p[i + 1]) * 2; } } f2[0] = sum; if (pos != N - 1) f2[0] += (L - p[pos + 1]) * 2; f3[0] = f1[0]; for (int i = 1; i < K; ++i) { f3[i] = min(f3[i - 1], f1[i]); } long long res = INF; res = min(res, f3[0] + f2[0]); for (int i = 0; i < K; ++i) { res = min(res, f3[K - i] + f2[i] + L); } 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...