Submission #23835

#TimeUsernameProblemLanguageResultExecution timeMemory
23835Nirjhor선물상자 (IOI15_boxes)C++14
35 / 100
2 ms376 KiB
#include <bits/stdc++.h> #include "boxes.h" using namespace std; int n, k, l; long long solveLeft (long long lim, int p[]) { int takenLeft = 0; long long len = 0; for (long long i = lim - 1; i >= 0; --i) { if (takenLeft == 0) { len += 2LL * p[i]; } ++takenLeft; if (takenLeft == k) { takenLeft = 0; } } return len; } long long solveRight (long long lim, int p[]) { long long len = 0; int takenRight = 0; for (long long i = lim; i < n; ++i) { if (takenRight == 0) { len += 2LL * (l - p[i]); } ++takenRight; if (takenRight == k) { takenRight = 0; } } return len; } pair <long long, long long> fullTrip (long long lim, int p[]) { int taken = 0; long long left = lim - 1, right = lim; // debug(left); debug(right); while (taken < k and (left >= 0 or right < n)) { if (left >= 0 and right < n) { if (l < p[left] + p[right]) { --left, ++taken; } else { ++right, ++taken; } } else if (left >= 0) { --left, ++taken; } else { ++right, ++taken; } } return make_pair(left, right); } #define debug(x) cout << #x << " = " << x << endl long long delivery (int N, int K, int L, int p[]) { int mid = L >> 1; // debug(mid); long long half = lower_bound(p, p + N, mid) - p; long long other = upper_bound(p, p + N, mid) - p; // debug(half); debug(other); n = N, k = K, l = L; // cout << solveLeft(half, p) << " " << solveRight(half, p) << endl; long long ret = solveLeft(half, p) + solveRight(half, p); ret = min(ret, solveLeft(other, p) + solveRight(other, p)); // debug(ret); // debug(left); debug(right); pair <long long, long long> f1 = fullTrip(half, p); pair <long long, long long> f2 = fullTrip(other, p); ret = min(ret, L + solveLeft(f1.first + 1, p) + solveRight(f1.second, p)); ret = min(ret, L + solveLeft(f2.first + 1, p) + solveRight(f2.second, p)); return ret; }
#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...