Submission #1326255

#TimeUsernameProblemLanguageResultExecution timeMemory
1326255ppmn_6Boxes with souvenirs (IOI15_boxes)C++20
0 / 100
1 ms332 KiB
#include "bits/stdc++.h" #include "boxes.h" using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); // https://codeforces.com/blog/entry/79148 class Timer: chrono::high_resolution_clock { const time_point start_time; public: Timer(): start_time(now()) {} rep elapsed_time() const { return chrono::duration_cast<chrono::milliseconds>(now() - start_time).count(); } } timer; ll delivery(int n, int k, int l, int v[]) { vector<ll> dp(n, 1e18); auto dist = [&] (ll x, ll y) { if (x > y) { swap(x, y); } return min(y - x, l - y + x); }; auto trip = [&] (int lb, int rb) { ll cur; if (((l & 1) && v[lb] <= l / 2 && v[rb] > l / 2) || (!(l & 1) && v[lb] < l / 2 && v[rb] > l / 2)) { cur = l; } else { cur = min(ll(l), 2 * max(dist(0, v[lb]), dist(0, v[rb]))); } if (!lb) { dp[rb] = min(dp[rb], cur); } else { dp[rb] = min(dp[rb], dp[lb - 1] + cur); } }; int nxt = n; for (int i = 0; i < n - 1; i++) { if (v[i + 1] - v[i] > l / 2) { nxt = i + 1; break; } } for (int i = 0; i < nxt % k; i++) { trip(0, i); } for (int i = nxt % k; i < nxt; i++) { if (i >= k - 1) { trip(i - k + 1, i); } trip(i - (nxt % k) + 1, i); } for (int i = nxt; i < nxt + ((n - nxt) % k); i++) { trip(nxt, i); } for (int i = nxt + ((n - nxt) % k); i < n; i++) { if (i - k + 1 >= nxt) { trip(i - k + 1, i); } trip(i - ((n - nxt) % k) + 1, i); } if (nxt != n) { return dp[n - 1] + dp[nxt - 1]; } return dp[n - 1]; }
#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...