Submission #319576

#TimeUsernameProblemLanguageResultExecution timeMemory
319576tjdgus4384Boxes with souvenirs (IOI15_boxes)C++14
20 / 100
1 ms492 KiB
#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)

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:9:13: warning: declaration of 'i' shadows a previous local [-Wshadow]
    9 |     for(int i = 1;i < N;i++){
      |             ^
boxes.cpp:6:9: note: shadowed declaration is here
    6 |     int i;
      |         ^
boxes.cpp:48:13: warning: declaration of 'i' shadows a previous local [-Wshadow]
   48 |     for(int i = 1;i < N;i++){
      |             ^
boxes.cpp:6:9: note: shadowed declaration is here
    6 |     int i;
      |         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...