# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1040019 | Kipras | 선물상자 (IOI15_boxes) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int delivery(int n, int k, int l, vector<int> pos){
ll mid = (l+1)/2;
vector<ll> dp1, dp2;
dp1.push_back(0);
dp2.push_back(0);
for(int i = 0; i < n && pos[i]<=mid; i++){
if(i==0){
dp1.push_back(pos[i]*2);
continue;
}
if(i%k!=0)dp1.push_back(pos[i]*2-pos[i-1]);
else dp1.push_back(dp1.back()+pos[i]);
}
for(int x = n-1; x >= 0 && pos[x]>=mid; x--){
if(x==n-1){
dp2.push_back(pos[x]*2);
continue;
}
ll ind = x-n+1;
if(ind%k!=0)dp2.push_back(pos[x]*2-pos[x+1]);
else dp2.push_back(dp1.back()+pos[x]);
}
ll rez = 1e18;
for(int i = 0; i < dp1.size(); i++){
if(dp2.size()>n-i)rez=min(rez, dp1[i] + dp2[n-i]);
if(dp2.size()>n-i-k&&n-i-k>=0)rez=min(rez, dp1[i] + dp2[n-i-l] + l);
}
return rez;
}