Submission #1359025

#TimeUsernameProblemLanguageResultExecution timeMemory
1359025c0det1gerBoxes with souvenirs (IOI15_boxes)C++20
100 / 100
465 ms196236 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
// #define int long long

long long delivery(int N, int K, int L, int p[]) {
    sort(p, p + N);
    vector<long long> left, right;
    left.push_back(0);
    for (int i = 0; i < N; i++){
        if (p[i] > L / 2){
            right.push_back(L - p[i]);
        }
        else{
            left.push_back(p[i]);
        }
    }
    right.push_back(0);
    reverse(right.begin(), right.end());
    vector<long long> dp1(left.size()), dp2(right.size());
    for (int i = 1; i < left.size(); i++){
        if (i < K){
            dp1[i] = left[i]*2;
        }
        else{
            dp1[i] = left[i]*2 + dp1[i - K];
        }
    }
    for (int i = 1; i < right.size(); i++){
        if (i < K){
            dp2[i] = right[i]*2;
        }
        else{
            dp2[i] = right[i]*2 + dp2[i - K];
        }
    }
    long long mi = dp1.back() + dp2.back();
    for (int i = 0; i < K; i++){
        int a = dp1.size() - i - 1;
        int b = dp2.size() - (K - i) - 1;
        if (a >= 0 && b >= 0){
            mi = min(mi, (long long)L + dp1[a] + dp2[b]);
        }
    }
    return mi;
}

/*
int main(){
    int p[3] = {1, 2, 5};
    cout << delivery(3, 2, 8, p);
}*/
#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...