Submission #1198706

#TimeUsernameProblemLanguageResultExecution timeMemory
1198706repsak선물상자 (IOI15_boxes)C++20
0 / 100
0 ms320 KiB
#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 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...