제출 #1331207

#제출 시각아이디문제언어결과실행 시간메모리
1331207tsetsenbileg선물상자 (IOI15_boxes)C++20
70 / 100
2099 ms203764 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
using ll = long long;
using pr = pair<int, int>;
// const int INF = 1e9+7, MOD = 1e9+7;
const ll INF = 1e18;
vector<int> a;
int n, k, l;

vector<ll> deepee(const vector<int>& a, int s) {
    vector<ll> dp(n+1, INF);
    dp[0] = 0;
    multiset<ll> cur;
    cur.insert(0);
    for (int i = 1; i <= n; i++) {
        if (i > k) {
            cur.erase(cur.find(dp[i-k-1]));
        }
        // for (auto j : cur) cout << j.first << ' ';
        // cout << '\n';
        auto mn = *cur.begin();
        int d = abs(a[i-1]-s) + min(a[i-1], l - a[i-1]);
        dp[i] = mn + d;
        cur.insert(dp[i]);
    }
    return dp;
}

long long delivery(int N, int K, int L, int p[]) {
    n = N; k = K; l = L;
    a.resize(n, 0);
    for (int i = 0; i < n; i++) a[i] = p[i];
    vector<ll> pref = deepee(a, 0);
    reverse(a.begin(), a.end());
    vector<ll> suff = deepee(a, l);
    ll res = INF;
    // res = min(pref[n], suff[n]);
    for (int i = 0; i <= n; i++) {
        res = min(res, pref[i] + suff[n-i]);
    }
    // cout << res;
    return res;
}
#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...