Submission #932299

#TimeUsernameProblemLanguageResultExecution timeMemory
932299beepbeepsheepShortcut (IOI16_shortcut)C++17
31 / 100
2062 ms596 KiB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
const ll maxn=505;
const ll inf=1e15;
vector<ll> adj[maxn];
ll pref[maxn];
ll suff[maxn];
ll sum[maxn];
long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c)
{
    ll tot=0;
    for (int i=1;i<=n;i++){
        pref[i]=max<ll>(pref[i-1],d[i-1]-tot); //offsets
        if (i!=n) tot+=l[i-1];
    }
    tot=0;
    for (int i=n;i>=1;i--){
        suff[i]=max<ll>(suff[i+1],d[i-1]-tot); //offsets
        if (i!=1) tot+=l[i-2]; 
    }
    for (int i=2;i<=n;i++){
        sum[i]=sum[i-1]+l[i-2]; //distance between a and b
    }
    ll ans=inf;
    for (int i=1;i<=n;i++){
        for (int j=i+1;j<=n;j++){
            ll curr=0;
            for (int s=i;s<j;s++){
                for (int e=s+1;e<=j;e++){
                    ll ds=d[s-1],de=d[e-1]; //where is s, where is e
                    if (s==i) ds=pref[s]+sum[s]-sum[1];
                    if (e==j) de=suff[e]+sum[n]-sum[e];
                    ll dis=sum[e]-sum[s]; //direct route
                    dis=min(dis,sum[j]-sum[i]-dis+c); //alternative route
                    //if (i==3 && j==4 && s==3 && e==4) cerr<<ds<<' '<<de<<' '<<dis<<endl; 
                    curr=max(curr,ds+de+dis);
                }
            }
            for (int s=1;s<=i;s++){
                for (int e=s+1;e<=i;e++){
                    ll ds=d[s-1],de=d[e-1];
                    curr=max(curr,ds+de+sum[e]-sum[s]);
                }
            }
            for (int s=j;s<=n;s++){
                for (int e=s+1;e<=n;e++){
                    ll ds=d[s-1],de=d[e-1];
                    curr=max(curr,ds+de+sum[e]-sum[s]);
                }
            }
            ans=min(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...