제출 #1212202

#제출 시각아이디문제언어결과실행 시간메모리
1212202kunzaZa183Boxes with souvenirs (IOI15_boxes)C++20
20 / 100
0 ms328 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; long long delivery(int N, int K, int L, int p[]) { vector<int> left, right; for (int i = 0; i < N; i++) if (p[i] <= L / 2) { left.push_back(p[i]); } else right.push_back(p[i]); // cerr << left.size() << " " << right.size() << "\n"; // cout << (left.empty() ? 0 : left.back() * 2) + // (right.empty() ? 0 : (N - right.front()) * 2) // << "\n"; // return min(L, (left.empty() ? 0 : left.back() * 2) + // (right.empty() ? 0 : (L - right.front()) * 2)); long long ans = 0; reverse(left.begin(), left.end()); for (int i = 0; i + K <= left.size(); i += K) { ans += 2 * left[i]; } for (int i = 0; i + K <= right.size(); i += K) { ans += 2 * (L - right[i]); } reverse(left.begin(), left.end()); reverse(right.begin(), right.end()); vector<int> newl, newr; for (int i = 0; i < left.size() % K; i++) newl.push_back(left[i]); for (int i = 0; i < right.size() % K; i++) newr.push_back(right[i]); reverse(newr.begin(), newr.end()); // cout << ans << "\n"; // assert(newl.empty() && newr.empty()); // return ans; if (newl.size() + newr.size() <= K) { return ans + min((long long)L, (newl.empty() ? 0ll : newl.back() * 2ll) + (newr.empty() ? 0ll : (L - newr.front()) * 2ll)); } else { vector<int> all; for (auto a : newl) all.push_back(a); for (auto a : newr) all.push_back(a); return ans + L + 2ll * min(all[all.size() - K], (L - all[K])); } }
#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...