| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1310263 | HoriaHaivas | 선물상자 (IOI15_boxes) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
#define int long long
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int range_rng(int l, int r)
{
return uniform_int_distribution<int>(l,r)(rng);
}
int pos[10000005];
int cw[10000005];
int ccw[10000005];
int delivery(int N, int K, int L, int positions[])
{
int n,k,l,i,d,ans;
n=N;
k=K;
l=L;
for (i=0;i<n;i++)
{
if (i<=k)
cw[i]=positions[i]*2;
else
cw[i]=cw[i-k]+positions[i]*2;
}
for (i=n-1;i>=0;i--)
{
d=(l-1)-positions[i]+1;
if ((n-1)-i+1<=k)
ccw[i]=d*2;
else
ccw[i]=ccw[i+k]+d*2;
}
ans=1e18;
for (i=0;i<n;i++)
{
ans=min(ans,cw[i]+ccw[i+1]);
}
for (i=0;i<n;i++)
{
if (i==0)
ans=min(ans,l+ccw[i+k]);
else if (i+k-1<n)
ans=min(ans,cw[i-1]+l+ccw[i+k]);
else
ans=min(ans,cw[i-1]+l);
}
return ans;
}
signed main()
{
/*
ifstream fin("arbore.in");
ofstream fout("arbore.out");
*/
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k,l,i;
cin >> n >> k >> l;
for (i=0;i<n;i++)
{
cin >> pos[i];
}
cout << delivery(n,k,l,pos);
return 0;
}
