Submission #291726

#TimeUsernameProblemLanguageResultExecution timeMemory
291726SOIVIEONEShortcut (IOI16_shortcut)C++14
0 / 100
1 ms256 KiB
#include "shortcut.h"
#include<bits/stdc++.h>
#define ll long long
#define pb push_back

using namespace std;

const int N = 1e3 + 5;
ll sum[N];
vector<ll> dn;


ll get_min_way(int l, int r, int tl, int tr, ll add){
    ll nans = abs(sum[l] - sum[tl]) + add + abs(sum[tr] - sum[r]) + dn[l] + dn[r];
    return nans;
}

long long find_shortcut(int n, vector<int> l, vector<int> d, int c)
{
    for(auto& e : d)
        dn.pb(e);
    for(int i = 1; i < n; i++){
        sum[i] = sum[i - 1] + (ll)l[i - 1];
    }
    ll mmax = 1e18, nmax, now;
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            if(sum[j] - sum[i] <= c)
                continue;
            nmax = 0;
            //cout << "add edge at range: " << i + 1 << ' ' << j + 1 << endl;
            for(int l = 0; l < n; l++){
                for(int r = l + 1; r < n; r++){
                    now = sum[r] - sum[l] + d[l] + d[r];
                    now = min(now, get_min_way(l, r, i, j, c));
                    nmax = max(nmax, now);
                }
            }
            mmax = min(mmax, nmax);
        }
    }
    return mmax;
}
#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...