제출 #1156088

#제출 시각아이디문제언어결과실행 시간메모리
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...