#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll noCircle(int N, int K, int L, vector<int> p){
auto centerL = lower_bound(p.begin(), p.end(), (L + 1) / 2);
int initialIndex = distance(centerL, p.begin()); //invalid
ll dist = 0;
int index = initialIndex;
while(index > 0){
dist += 2 * p[index];
index -= K;
}
index = initialIndex + 1;
while(index < N){
dist += 2 * p[index];
index += K;
}
return dist;
}
ll circle(int N, int K, int L, vector<int> p){
if(K <= 1) return 1e18;
auto centerL = lower_bound(p.begin(), p.end(), (L + 1) / 2);
int initialIndex = distance(centerL, p.begin());
ll bestDist = 1e18;
for(int i = initialIndex - K + 2; i <= initialIndex; i++){
int leftIndex = initialIndex;
int rightIndex = initialIndex + K;
ll dist = 0;
while(leftIndex > 0){
dist += 2 * p[leftIndex];
leftIndex -= K;
}
while(rightIndex < N){
dist += 2 * p[rightIndex];
rightIndex += K;
}
bestDist = min(bestDist, dist);
}
return bestDist;
}
long long delivery(int N, int K, int L, int p[]) {
vector<int> values;
for(int i = 0; i < N; i++){
values[i] = p[i];
}
return min(noCircle(N, K, L, values), circle(N, K, L , values));
}
# | 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... |