Submission #1293360

#TimeUsernameProblemLanguageResultExecution timeMemory
1293360goulthenBoxes with souvenirs (IOI15_boxes)C++20
35 / 100
1 ms576 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define rep(i,a,b) for (int i = a; i <= b; i++)
#define per(i,a,b) for (int i = a; i >= b; i--)
#define pb push_back

long long delivery(int N, int K, int L, int p[]) {
    vector<int> np;
    vector<ll> dp(K,0LL), dp2(K,0LL);

    per(i,N-1,0LL) np.pb(p[i]);
    per(i,N-1,0LL) np.pb(L-p[i]);

    rep(i,0,N-1) dp[i%K]+=np[i];
    ll ans = 2*dp[0];

    rep(r,N,2*N-1) {
        int l = (r)%N;
        dp[l%K] -= np[l];
        dp2[r%K] += np[r];
        ans = min(ans, 2*(dp[(l+1)%K] + dp2[r%K]));
        //cout << l << ' ' << 2*dp[(l+1)%K] << ' ' << 2*dp2[r%K] << '\n';
        if(l <= K-1) ans = min(ans, 2*dp[(l+1)%K] + L);
        if(l >= N-K-1) ans = min(ans, 2*dp2[r%K] + L);
    }
    if(N==K) ans = min(ans, (ll)L);

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