제출 #1232552

#제출 시각아이디문제언어결과실행 시간메모리
123255212baater선물상자 (IOI15_boxes)C++20
100 / 100
348 ms204060 KiB
#include "boxes.h"
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef long long ll;

ll delivery(int N, int K, int L, int p[]) {
    vector<ll> l(N+1);
    vector<ll> r(N+1);
    l[0] = 0;
    r[N] = 0;
    for (int i = 0; i <= N; i++) {
        if (i == 0) {
            l[i] = 0;
        } else if (i <= K) {
            l[i] = 2*p[i-1];
        } else {
            l[i] = 2*p[i-1] + l[i-K];
        }
    }

    for (int i = N; i >= 0; i--) {
        if (i == N) {
            r[i] = 0;
        } else if (N-i <= K) {
            r[i] = 2*(L - p[i]);
        } else {
            r[i] = 2*(L - p[i]) + r[i+K];
        }
    }
    // for (auto num : l) {
    //     cout << num << " ";
    // }
    // cout << endl;
    // for (auto num : r) {
    //     cout << num << " ";
    // }
    // cout << endl;
    ll best = r[0];
    for (int i = 0; i <= N; i++) {
        best = min(best, l[i]+r[i]);
    }

    if (K >= N) {
        return min(static_cast<ll>(L), best);
    }

    for (int i = K; i <= N; i++) {
        best = min(best, l[i-K] + r[i] + L);
    }

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