Submission #558748

#TimeUsernameProblemLanguageResultExecution timeMemory
558748elazarkorenShortcut (IOI16_shortcut)C++17
23 / 100
2082 ms336 KiB
#include "shortcut.h"
#include <bits/stdc++.h>
#define x first
#define y second
#define all(v) v.begin(), v.end()
#define chkmin(a, b) a = min(a, b)
#define chkmax(a, b) a = max(a, b)
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;
typedef vector<pii> vii;

const int MAX_N = 1e6 + 5;
const ll infinity = 1e18;

ll prefix[MAX_N];

inline ll Dist(int l, int r) {
    if (l > r) swap(l, r);
    return prefix[r] - prefix[l];
}

ll find_shortcut(int n, vi l, vi d, int c) {
    for (int i = 1; i < n; i++) prefix[i] = prefix[i - 1] + l[i - 1];
    ll ans = infinity;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            ll curr = 0;
            for (int a = 0; a < n; a++) {
                for (int b = a + 1; b < n; b++) {
                    ll x = min({Dist(a, b), min(Dist(a, i), Dist(a, j)) + min(Dist(b, i), Dist(b, j)) + c});
                    chkmax(curr, x + d[a] + d[b]);
                }
            }
            chkmin(ans, curr);
        }
    }
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...