Submission #431927

#TimeUsernameProblemLanguageResultExecution timeMemory
431927c4ts0upBoxes with souvenirs (IOI15_boxes)C++17
0 / 100
1 ms332 KiB
#include "boxes.h"

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define pb push_back
#define ff first
#define ss second

const ll INF = 1e18;

ll n, k, l;
vector <ll> arr;

// []
ll CalcIzq(ll x) {
    ll cnt = 0LL, i=1;
    for (i=1; k*i-1 < x; i++) {
        cnt += arr[i];
        // cual es la manera más corta de volver
        cnt += min(arr[i], l-arr[i]);
    }

    cnt += arr[min(k*i-1, x)]; //////////////////// PUEDE TENER UN ERROR
    // cual es la manera más corta de volver
    cnt += min(arr[min(k*i-1, x)], l - arr[min(k*i-1, x)]);

    return cnt;
}

// []
ll CalcDer(ll x) {
    ll cnt = 0LL, i=1;
    for (i=1; l-k*i > x; i++) {
        cnt += l-arr[l-k*i];
        // cual es la manera más corta de volver
        cnt += min(l-arr[l-k*i], arr[l-k*i]);
    }

    cnt += l-arr[max(l-k*i, x)]; ///////////////////////// PUEDE TENER UN ERROR
    // cual es la manaer más corta de volver
    cnt += min(l-arr[max(l-k*i, x)], arr[max(l-k*i, x)]);

    return cnt;
}

ll delivery(int N, int K, int L, int p[]) {
    // Cambia la entrada
    n = (ll)N;
    k = (ll)K;
    l = (ll)L;

    arr.resize(n);
    for (int i=0; i<n; i++) arr[i] = (ll)p[i];
    ll cnt = INF;

    for (ll i=-1; i<n; i++) {
        cnt = min(cnt, (i<0 ? 0LL : CalcIzq(i)) + (i==n-1 ? 0LL : CalcDer(i+1)));
    }

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