Submission #1156088

#TimeUsernameProblemLanguageResultExecution timeMemory
1156088Saul0906선물상자 (IOI15_boxes)C++20
100 / 100
412 ms174864 KiB
#include "boxes.h"
#include <bits/stdc++.h>
#define ll long long
#define rep(a,b,c) for(ll a=b; a<c; a++)
#define repr(a,b,c) for(ll a=b-1; a>c-1; a--)
#define pb push_back
#define all(a) a.begin(), a.end()

using namespace std;
using vll = vector<ll>;

const ll inf = 1e18;

ll delivery(int n, int k, int l, int *p) {
        ll N=n, K=k, L=l;
        vll vl, vr, v(K);
        ll mn=inf, ans=inf, ck;
        fill(all(v),inf);
        repr(i,N,0){
                if((L-p[i])>=(p[i])) break;
                if(vr.size()<K) vr.pb(2*(L-p[i]));
                else vr.pb(vr[vr.size()-K]+2*(L-p[i]));
                mn=min(mn,vr.back()+((i+K-1)/K)*L);
                v[i%K]=min(v[i%K],vr.back()+((i+K-1)/K)*L);
        }
        ans=min(ans,min({mn+L,v[0],((N+K-1)/K)*L}));
        rep(i,0,N){
                if((L-p[i])<(p[i])) break;
                if(vl.size()<K) vl.pb(2*p[i]);
                else vl.pb(vl[vl.size()-K]+2*p[i]);
                ck=((i+1+K-1)/K)*L;
                ans=min(ans,min({mn+L-ck,v[(i+1)%K]-ck,(((N-i-1)+K-1)/K)*L})+vl.back());
        }
        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...