이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "boxes.h"
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
ll delivery(int n,int k, int l, int sections[]){
if (l==1) return 0;
vi v(n);
for (ll i=0;i<n;i++) v[i]=sections[i];
v.push_back(0);
v.push_back(l);
sort(v.begin(),v.end());
vi avances(k,0);
vi sol(n+1);
sol[0]=0;
vi trusol(n+2,0);
for (ll i=1;i<n+2;i++){
if(v[i]<=l/2){
avances[i%k]+=v[i]-v[i-1];
sol[i]=sol[i-1]+avances[i%k];
trusol[i]=2*sol[i];
}
else{
if (i<=k) sol[i]=l;
else sol[i]=trusol[i-k]+l;
trusol[i]=sol[i];
}
}
for (ll i=0;i<n+2;i++) v[i]=l-v[i];
avances=vi(k,0);
vi sol2(n+2,0);
ll res=1e18;
sol2[n+1]=0;
vi trusol2(n+2);
for (ll i=n;i>=0;i--){
if(v[i]<=l/2){
avances[i%k]+=v[i]-v[i+1];
sol2[i]=sol2[i+1]+avances[i%k];
trusol2[i]+=2*sol2[i];
}
else{
if (i+k>n) sol2[i]=l;
else sol2[i]=trusol2[i+k]+l;
trusol2[i]+=sol2[i];
}
}
for (ll i=0;i<n+1;i++) res=min(res,trusol[i]+trusol2[i+1]);
cerr << res;
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |