Submission #906466

#TimeUsernameProblemLanguageResultExecution timeMemory
906466vjudge1Shortcut (IOI16_shortcut)C++17
23 / 100
2101 ms604 KiB
#include "shortcut.h"
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;
using ll = long long;

ll find_shortcut(int n, vi l, vi d, int c) {
    vector<ll> sl;    
    for(int i = 0; i < n - 1; ++i) {
        sl.push_back(l[i]);
        if(i) sl[i] += sl[i - 1];
    }

    auto dist_direct = [&](int u, int v) {
        if(u > v) swap(u, v);
        if(!v) return 0ll;
        if(u) return sl[v - 1] - sl[ u - 1 ];
        else return sl[v - 1];
    };

    auto dist = [&](int u, int v, int st, int dr) { /// (st, dr) express line
        ll re = dist_direct(u, v);
        re = min(re, dist_direct(u, st) + dist_direct(dr, v) + c);
        re = min(re, dist_direct(u, dr) + dist_direct(st, v) + c);
        return re + d[u] + d[v];
    };

    ll re = 1e18;
    for(int st = 0; st < n; ++st) {
        for(int dr = st + 1; dr < n; ++dr) {
            ll cre = 0;
            for(int i = 0; i < n; ++i)
                for(int j = i + 1; j < n; ++j) {
                    cre = max(cre, dist(i, j, st, dr));
                }
            re = min(re, cre);
        }
    }
    return re; 
}
#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...