Submission #1312658

#TimeUsernameProblemLanguageResultExecution timeMemory
1312658Math4Life2020Boxes with souvenirs (IOI15_boxes)C++20
0 / 100
0 ms332 KiB
#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;
ll 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 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...