제출 #1169299

#제출 시각아이디문제언어결과실행 시간메모리
1169299LucaLucaM선물상자 (IOI15_boxes)C++20
0 / 100
0 ms328 KiB
#include "boxes.h" #include <vector> #include <algorithm> #include <iostream> #define debug(x) #x << " = " << x << '\n' long long delivery(int n, int k, int L, int p[]) { std::vector<std::pair<int, int>> v(n); for (int i = 0; i < n; i++) { v[i].first = std::min(p[i], L - p[i]); v[i].second = p[i]; } std::sort(v.begin(), v.end()); std::reverse(v.begin(), v.end()); long long answer = 0; std::vector<int> st, dr; for (int i = 0; i < n; i++) { if (v[i].first == v[i].second) { st.push_back(v[i].first); } else { dr.push_back(v[i].first); } } std::sort(st.begin(), st.end()); std::sort(dr.begin(), dr.end()); while (n >= 2 && 2 * std::max(st.back(), dr.back()) >= L) { answer += L; for (int i = 0; i < std::min(n, k); i++){ if (v.back().first == v.back().second) { st.pop_back(); } else { dr.pop_back(); } v.pop_back(); } n = std::max(0, n - k); } while (!st.empty()) { answer += 2 * st.back(); for (int i = 0; i < k && !st.empty(); i++) { st.pop_back(); } } while (!dr.empty()) { answer += 2 * dr.back(); for (int i = 0; i < k && !dr.empty(); i++) { dr.pop_back(); } } return answer; }
#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...