제출 #1195762

#제출 시각아이디문제언어결과실행 시간메모리
1195762DeathIsAweBoxes with souvenirs (IOI15_boxes)C++20
0 / 100
0 ms328 KiB
#include "boxes.h" #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define ff first #define ss second #define ll long long using namespace std; ll dp[10000000], revdp[10000000], n, k, l; vector<ll> p; ll delivery(int N, int K, int L, int P[]) { n = N; k = K; l = L; for (int i=0;i<n;i++) { p.pb(P[i]); dp[i] = 0; revdp[i] = 0; } dp[0] = 0; revdp[0] = 0; ll leftlimit = n, rightlimit = n; for (int i=0;i<n;i++) { if (p[i] >= ceil(l/2)) { leftlimit = i; break; } dp[i + 1] = 2 * p[i] + dp[max((ll)0, i + 1 - k)]; } for (int i=0;i<n;i++) { if (p[n - i - 1] <= l/2) { rightlimit = i; break; } revdp[i + 1] = 2 * (l - p[n - i - 1]) + revdp[max((ll)0, i + 1 - k)]; } if (leftlimit == 0 || rightlimit == 0) { return dp[leftlimit] + dp[rightlimit]; } ll ans = INT64_MAX; ll start, end, count = 0; if (l % 2 == 0) { for (int i=0;i<n;i++) { if (p[i] == l/2) { count += 1; end = i; } } if (count == 0) { ans = min(ans, dp[leftlimit] + revdp[rightlimit]); end = leftlimit; start = end - 1; } else { start = end - count + 1; if (count % k != 0) count = k * (count / k + 1); for (int i=end;i<start+count;i++) { ans = min(ans, dp[max((ll)0, i - count + 1)] + revdp[max((ll)0, n - i)] + (count / k) * l); } } count += k; for (int i=end;i<start+count;i++) { ans = min(ans, dp[max((ll)0, i - count + 1)] + revdp[max((ll)0, n - i)] + (count / k) * l); } } else { end = leftlimit; start = end - 1; ans = min(ans, dp[leftlimit] + revdp[rightlimit]); for (int i=end;i<start+k;i++) { ans = min(ans, dp[max((ll)0, i - k + 1)] + revdp[max((ll)0, n - i)] + l); } } //cout << dp[0] << ' '<< dp[1] << ' ' << dp[2] << endl; //cout << revdp[0] << ' ' << revdp[1] << endl; return ans; }
#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...