Submission #268544

#TimeUsernameProblemLanguageResultExecution timeMemory
268544A02Boxes with souvenirs (IOI15_boxes)C++14
35 / 100
1 ms384 KiB
#include "boxes.h"
#include <vector>
#include <set>
#include <algorithm>
#include <utility>
#include <iostream>

using namespace std;

long long delivery(int N, int K, int L, int p[]) {

    vector<long long> left_positions;
    vector<long long> right_positions;

    long long no_round_trips = 0;

    for (int i = 0; i < N; i++){
        if (p[i] <= L/2){
            left_positions.push_back(p[i]);
        }
    }

    for (int i = N - 1; i >= 0; i--){
        if (p[i] > L/2){
            right_positions.push_back(L - p[i]);
        }
    }

    int current_boxes = 0;

    while (left_positions.size() > 0){
        no_round_trips += left_positions[left_positions.size() - 1] * 2;

        current_boxes = K;

        for (;left_positions.size() && current_boxes > 0; current_boxes--){
            left_positions.pop_back();
        }

    }

    while (right_positions.size() > 0){
        no_round_trips += right_positions[right_positions.size() - 1] * 2;

        current_boxes = K;

        for (; right_positions.size() && current_boxes > 0; current_boxes--){
            right_positions.pop_back();
        }

    }

    long long one_round_trip = L;

    for (int i = 0; i < N; i++){
        if (p[i] <= L/2){
            left_positions.push_back(p[i]);
        }
    }

    for (int i = N - 1; i >= 0; i--){
        if (p[i] > L/2){
            right_positions.push_back(L - p[i]);
        }
    }

    current_boxes = K;
    while(current_boxes > 0){

        if (right_positions.size() && left_positions.size() && left_positions[left_positions.size() - 1] > right_positions[right_positions.size() - 1]){
            left_positions.pop_back();
        } else {
            if (right_positions.size() == 0 && left_positions.size()){
                left_positions.pop_back();
            }
            if (right_positions.size()){
                right_positions.pop_back();
            }
        }
        current_boxes--;
    }

    current_boxes = 0;

    while (left_positions.size() > 0){

        one_round_trip += left_positions[left_positions.size() - 1] * 2;

        current_boxes = K;

        for (;left_positions.size() && current_boxes > 0; current_boxes--){
            left_positions.pop_back();
        }

    }

    while (right_positions.size() > 0){
        one_round_trip += right_positions[right_positions.size() - 1] * 2;

        current_boxes = K;

        for (; right_positions.size() && current_boxes > 0; current_boxes--){
            right_positions.pop_back();
        }

    }


    //cout << min(one_round_trip, no_round_trips) << endl;
    //cout << no_round_trips << endl;

    return min(one_round_trip, no_round_trips);

    return 0;
}
#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...