Submission #1367802

#TimeUsernameProblemLanguageResultExecution timeMemory
1367802marizaShortcut (IOI16_shortcut)C++20
38 / 100
2094 ms436 KiB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll INF=1e18;

long long find_shortcut(int n, vector<int> x, vector<int> d, int c){
    ll a[n]={};
    for(ll i=1; i<n; i++){
        a[i]=a[i-1]+x[i-1];
    }

    ll ans=INF;
    for(ll l=0; l<n; l++){
        for(ll r=l+1; r<n; r++){
            ll curr=0;

            // A <-> A
            ll prev=INF;
            for(ll i=0; i<=l; i++){
                curr=max(curr,a[i]-prev+d[i]);
                prev=min(prev,a[i]-d[i]);
            }

            // A <-> C
            for(ll i=r; i<n; i++){
                curr=max(curr,a[i]-prev+d[i]-max(0ll,a[r]-a[l]-c));
            }

            // A <-> B
            for(ll i=l+1; i<r; i++){
                curr=max(curr,min(a[i],a[r]-a[i]+c+a[l])-prev+d[i]);
            }

            // C <-> C
            prev=-INF;
            for(ll i=n-1; i>=r; i--){
                curr=max(curr,prev-a[i]+d[i]);
                prev=max(prev,a[i]+d[i]);
            }

            // B <-> C
            for(ll i=l+1; i<r; i++){
                curr=max(curr,prev+min(-a[i],-a[r]+a[i]-a[l]+c)+d[i]);
            }

            // B <-> B
            for(ll i=l+1; i<r; i++){
                for(ll j=i+1; j<r; j++){
                    curr=max(curr,min(a[j]-a[i],a[i]-a[l]+c+a[r]-a[j])+d[i]+d[j]);
                }
            }

            ans=min(ans,curr);
            // cout<<l<<"-"<<r<<": "<<curr<<endl;
        }
    }

    return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...