Submission #1009838

#TimeUsernameProblemLanguageResultExecution timeMemory
1009838ProtonDecay314Boxes with souvenirs (IOI15_boxes)C++17
100 / 100
721 ms372024 KiB
/*
0 1l 2l 3l 4
1r 2r 3r

0
1l
2l = 1
3l = 2
4 = ?
1r
2r = 1
3r = 2
[3r, 3r, 3l] -> 8
[3l, 2l, 2r] -> 8
= 16

[3r, 3r, 2r] -> 6 
[3l, 3l, 2l] -> 6

1l, 2l, 3r

3l 3r 2r 2l 2l

[3l, 3r], [2l, 2l], [2r, 0l]
8 + 4 + 4 = 12

[3r, 2r], [3l, 2l], [2l, 0l]
6 + 6 + 4 = 16

10 2 10
4 3 0 1 1 2 0 5 1 6

1 1 1 2 3 4

5 6

10 7 10
7 8 1 4 3 8 7 0 4 6

4 3 10
4 9 2 9

2 4
9 9

FAILING TEST CASE:
5 3 10
2 5 8 4 3

2 3 4
5 8

2 3 4 5
8

??? Does this fail?
10 7 10
7 8 1 4 3 8 7 0 4 6

0 1 3 4
6 7 7 8 8


*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pi;
typedef pair<ll, ll> pll;
typedef vector<pi> vpi;
typedef vector<pll> vpll;
#define first fi;
#define second se;

ll delivery(int intn, int intk, int intl, int pos_int[]) {
    ll n = intn, k = intk, l = intl;
    vll pos(n, 0ll);
    for(ll i = 0; i < n; i++) {
        pos[i] = pos_int[i];
    }

    sort(pos.begin(), pos.end());

    vll pref(n + 1, 0ll);
    vll suff(n + 1, 0ll);
    for(ll i = 1ll; i < n + 1; i++) {
        pref[i] = (i >= k ? pref[i - k] : 0ll) + pos[i - 1];
    }

    for(ll i = n - 1; i >= 0ll; i--) {
        suff[i] = (i + k <= n ? suff[i + k] : 0ll) + l - pos[i];
    }
    
    ll ans = numeric_limits<ll>::max();

    for(ll i = 0; i <= n; i++) {
        ans = min(ans, (pref[i] + suff[i]) << 1ll);
        if(i + k <= n) ans = min(ans, ((pref[i] + suff[i + k]) << 1ll) + l);
    }

    return ans;
}

#ifdef DEBUG
int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios_base::sync_with_stdio(false);

    int n, k, l;
    cin >> n >> k >> l;

    vi positions(n, 0);
    for(int& pos : positions) {
        cin >> pos;
    }

    cout << delivery(n, k, l, &positions[0]) << endl;
}
#endif
#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...