Submission #137418

#TimeUsernameProblemLanguageResultExecution timeMemory
137418HassoonyShortcut (IOI16_shortcut)C++17
23 / 100
2059 ms476 KiB
#include <bits/stdc++.h>
#include "shortcut.h"
//#include "grader.cpp"
using namespace std;
typedef long long ll;
const ll inf=(1ll<<61);
const int MX=3009;
ll Pref[MX],d[MX];
ll dis(ll x,ll y){
    if(x==y)return 0;
    if(x>y)swap(x,y);
    ll P=0;
    if(x)P=Pref[x-1];
    return Pref[y-1] - P;
}
ll find_shortcut(int N, vector<int> l, vector<int> D, int c){
    int n=N;
    for(int i=0;i<n;i++)d[i]=D[i];
    Pref[0]=l[0];
    for(int i=1;i<n;i++)Pref[i]=Pref[i-1]+l[i];
    ll ans=inf;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            ll sum=0;
            for(int x1=0;x1<n;x1++){
                for(int x2=x1+1;x2<n;x2++){
                    ll d1=dis(x1,x2);
                    ll d2=dis(x1,i) + c + dis(x2,j);
                    ll d3=dis(x1,j) + c + dis(x2,i);
                    d1=min(d1,d2);
                    d1=min(d1,d3);
//                    cout<<x1<<" "<<x2<<" "<<d1<<endl;
                    sum=max(sum,d1 + d[x1] + d[x2]);
                }
            }
            ans=min(ans,sum);
        }
    }
    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...