# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
319576 | tjdgus4384 | Boxes with souvenirs (IOI15_boxes) | C++14 | 1 ms | 492 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "boxes.h"
using namespace std;
long long delivery(int N, int K, int L, int positions[]){
int i;
long long ans = 0;
for(int i = 1;i < N;i++){
if(positions[i] - positions[i-1] > L/2){
int t = i - 1;
while(t >= 0) {ans += positions[t]*2;t -= K;}
t = i;
while(t < N) {ans += (L-positions[t])*2;t += K;}
return ans;
}
}
if(K == 1 || K == N){
for(i = 0;i + K - 1 < N;i += K){
if(positions[i] > L/2) ans += (long long)(L-positions[i])*2;
else if(positions[i + K - 1] <= L/2) ans += (long long)positions[i + K - 1]*2;
else{
for(int j = i+1;j <= i + K - 1;j++){
if(positions[j]-positions[j-1] > L/2){
ans += (long long)(L-positions[j]+positions[j-1])*2;
goto next;
}
}
ans += (long long)L;
}
next:;
}
if(i == N) return ans;
if(positions[i] > L/2) ans += (long long)(L-positions[i])*2;
else if(positions[N-1] <= L/2) ans += (long long)positions[N-1] * 2;
else{
for(int j = i+1;j <= N - 1;j++){
if(positions[j]-positions[j-1] > L/2){
ans += (long long)(L-positions[j]+positions[j-1])*2;
goto next1;
}
}
ans += (long long)L;
}
next1:;
return ans;
}
for(int i = 1;i < N;i++){
if(positions[i] - positions[i-1] > L/2){
int t = i - 1;
while(t >= 0) {ans += positions[t]*2;t -= K;}
t = i;
while(t < N) {ans += (L-positions[t])*2;t += K;}
return ans;
}
}
long long ans1 = 0, ans2 = 0;
for(i = 0;i + K - 1 < N;i += K){
if(positions[i] > L/2) ans1 += (long long)(L-positions[i])*2;
else if(positions[i + K - 1] <= L/2) ans1 += (long long)positions[i + K - 1]*2;
else ans1 += (long long)L;
}
if(i != N){
if(positions[i] > L/2) ans1 += (long long)(L-positions[i])*2;
else if(positions[N-1] <= L/2) ans1 += (long long)positions[N-1] * 2;
else ans1 += (long long) L;
}
for(i = 0;i + K - 1 < N;i += K){
if(positions[N - 1 - i] > L/2) ans2 += (long long)(L-positions[N - 1 - i])*2;
else if(positions[N - 1 - (i + K - 1)] <= L/2) ans2 += (long long)positions[N - 1 - (i + K - 1)]*2;
else ans2 += (long long)L;
}
if(i != N){
if(positions[N - 1 - i] > L/2) ans2 += (long long)(L-positions[N - 1 - i])*2;
else if(positions[0] <= L/2) ans2 += (long long)positions[0] * 2;
else ans2 += (long long) L;
}
return min(ans1, ans2);
}
Compilation message (stderr)
# | 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... |