# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
831767 | waldi | 선물상자 (IOI15_boxes) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define FOR(i,p,k) for(int i=(p);i<=(k);++i)
#define REP(i,n) FOR(i,0,(n)-1)
typedef long long ll;
using namespace std;
ll delivery(int n, int k, int l, vector<int> poz){
ll wyn = ((ll)n)*((ll)l);
FOR(off, 1, min(n, k)){
ll twyn = 0ll;
for(int i = off-1; 1; i += k){
int poc = poz[max(i-k+1, 0)];
int kon = poz[min(i, n-1)];
if(kon <= l>>1) twyn += kon<<1;
else if(poc >= (l+1)>>1) twyn += (l-poc)<<1;
else twyn += l;
if(i >= n-1) break;
}
wyn = min(wyn, twyn);
}
return wyn;
}
#ifdef LOCAL
#define maxn 1000
int main(){
int n, k, l, p[maxn];
scanf("%d%d%d", &n, &k, &l);
REP(i, n) scanf("%d", &p[i]);
ll wyn = delivery(n, k, l, p);
printf("%lld\n", wyn);
}
#endif