Submission #1169346

#TimeUsernameProblemLanguageResultExecution timeMemory
1169346LucaLucaMBoxes with souvenirs (IOI15_boxes)C++20
100 / 100
1708 ms243112 KiB
#include "boxes.h" #include <vector> #include <algorithm> #include <iostream> #include <cassert> using ll = long long; #define debug(x) #x << " = " << x << '\n' ll 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()); 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()); ll answer = 1e18; std::vector<ll> sumst((int) st.size(), 0); std::vector<ll> sumdr((int) dr.size(), 0); for (int i = 0; i < (int) st.size(); i++) { sumst[i] = st[i]; if (i >= k) { sumst[i] += sumst[i - k]; } } for (int i = 0; i < (int) dr.size(); i++) { sumdr[i] = dr[i]; if (i >= k) { sumdr[i] += sumdr[i - k]; } } std::vector<ll> best(k, 1e18); for (int cater = 0; cater <= (int) dr.size(); cater++) { ll you = 0; if (cater % k == 0) { if (cater < (int) dr.size()) { you += (ll) 2 * sumdr[(int) dr.size() - cater - 1]; } you += (ll) L * (cater / k); } else { if (cater < (int) dr.size()) { you += (ll) 2 * sumdr[(int) dr.size() - cater - 1]; } you += (ll) L * (1 + cater / k); } best[cater % k] = std::min(best[cater % k], you); } for (int catel = 0; catel <= (int) st.size(); catel++) { // dintre turele full, cate sterg din st? // catel + cater = 0 (mod k) <=> cater = k - catel (mod k) ll me = 0; if (catel < (int) st.size()) { me += (ll) 2 * sumst[(int) st.size() - catel - 1]; } me += (ll) L * (catel / k); int you = catel % k == 0? 0 : k - catel % k; answer = std::min(answer, me + best[you]); } return answer; } // daca da 70 si nu 100 e destul de troll
#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...