#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long; using pii = pair<ll,ll>;
const ll INF = 1e18;
vector<ll> p;
vector<vector<ll>> pf;
int N,K,L;
pii sfw(ll x) { //{sum forward starting at this index, # of such vertices}
if (x>=N) {
return {0LL,0LL};
}
ll r = x%K;
ll bind = x/K;
return {(pf[r].back()-pf[r][bind]),pf[r].size()-bind};
}
pii sbk(ll x) {
if (x<0) {
return {0LL,0LL};
}
ll r = x%K;
ll find = x/K+1;
return {(pf[r][find]),find};
}
long long delivery(int _N, int _K, int _L, int _p[]) {
for (ll x=0;x<_N;x++) {
p.push_back(_p[x]);
}
N = _N; K = _K; L = _L;
K = min(K,N);
sort(p.begin(),p.end());
pf = vector<vector<ll>>(K,vector<ll>(1,0));
for (ll x=0;x<N;x++) {
pf[x%K].push_back((pf[x%K].back())+p[x]);
}
ll ans = INF;
for (ll t=0;t<=N;t++) {
ll cval = 0;
cval += 2*sbk(t-1).first;
cval += (2*sfw(t).second*L-2*sfw(t).first);
ans = min(ans,cval);
}
for (ll t=0;t<=(N-K);t++) {
ll cval = L;
cval += 2*sbk(t-1).first;
cval += (2*sfw(t+K).second*L-2*sfw(t+K).first);
ans = min(ans,cval);
}
return ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |