Submission #937657

#TimeUsernameProblemLanguageResultExecution timeMemory
937657danikoynovBoxes with souvenirs (IOI15_boxes)C++14
100 / 100
508 ms374492 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll inf = 1e18; const int maxn = 1e7 + 10; int n, k; ll p[maxn], temp[maxn]; ll L; ll get_price_left(int x) { ll res = 0; int t = 0; for (int i = x - 1; i >= 0; i --) { t ++; if ((t - 1) % k == 0) { //cout << t << endl; res = res + 2 * p[i]; } } return res; } ll get_price_right(int x) { ll res = 0; int t = 0; for (int i = n - x; i < n; i ++) { t ++; if ((t - 1) % k == 0) { ///cout << t << endl; res = res + 2 * (L - p[i]); } } return res; } ll pref[maxn], suff[maxn]; long long delivery(int N, int K, int _L, int P[]) { for (int i = 0; i < N; i ++) p[i] = P[i]; n = N; k = K; L = _L; //cout << get_price_right(1) << endl; ///exit(0); ll res = inf; for (int i = 1; i <= N; i ++) { if (i >= k) pref[i] += pref[i - k]; pref[i] += 2 * p[i - 1]; } for (int i = 1; i <= N; i ++) { if (i >= k) suff[i] += suff[i - k]; suff[i] += 2 * (L - p[N - i]); } for (int i = 0; i <= N; i ++) { ll val = pref[i] + suff[N - i]; ///cout << "split " << i << " " << val << endl; res = min(res, val); if (N - i - k >= 0) { //cout << "in" << endl; val = pref[i] + suff[N - i - k] + L; //cout << "here " << i << " " << N - i - k << " " << val << endl; res = min(res, val); } } return res; }
#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...