제출 #278590

#제출 시각아이디문제언어결과실행 시간메모리
278590eohomegrownappsShortcut (IOI16_shortcut)C++14
31 / 100
2099 ms504 KiB
#include "shortcut.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll find_shortcut(int n, vector<int> l, vector<int> d, int c){ vector<ll> pathlength(n); for (ll i = 1; i<n; i++){ pathlength[i]=pathlength[i-1]+l[i-1]; } vector<ll> prefixmax(n); vector<ll> suffixmax(n); prefixmax[0]=pathlength[n-1]-pathlength[0]+d[0]; for (ll i = 1; i<n; i++){ prefixmax[i]=max(prefixmax[i-1],d[i]+pathlength[n-1]-pathlength[i]); } for (ll i = 0; i<n; i++){ prefixmax[i]-=pathlength[n-1]-pathlength[i]; } suffixmax[n-1]=pathlength[n-1]-pathlength[0]+d[n-1]; for (ll i = n-2; i>=0; i--){ suffixmax[i]=max(suffixmax[i+1],d[i]+pathlength[i]-pathlength[0]); } for (ll i = 0; i<n; i++){ suffixmax[i]-=pathlength[i]-pathlength[0]; } vector<ll> prefixrangemax(n); vector<ll> suffixrangemax(n); for (int i = 1; i<n; i++){ prefixrangemax[i]=prefixrangemax[i-1]; for (int j = 0; j<i; j++){ //from j to i prefixrangemax[i]=max(prefixrangemax[i],d[i]+d[j]+pathlength[i]-pathlength[j]); } } for (int i = n-2; i>=0; i--){ suffixrangemax[i]=suffixrangemax[i+1]; for (int j = i+1; j<n; j++){ //from j to i suffixrangemax[i]=max(suffixrangemax[i],d[i]+d[j]+pathlength[j]-pathlength[i]); } } vector<ll> endspluspath(n); vector<ll> endsminuspath(n); for (ll i = 0; i<n; i++){ endspluspath[i]=d[i]+pathlength[i]; endsminuspath[i]=d[i]-pathlength[i]; } ll mindist = 1e18; /*for (int i : prefixmax){ cout<<i<<' '; }cout<<'\n'; for (int i : suffixmax){ cout<<i<<' '; }cout<<'\n';*/ for (ll a = 0; a<n-1; a++){ for (ll b = a+1; b<n; b++){ //try express road linking a and b ll mxdist = max(prefixrangemax[a],suffixrangemax[b]); //try thing-on-left to thing-on-right mxdist = max(mxdist,min(ll(c),pathlength[b]-pathlength[a])+suffixmax[b]+prefixmax[a]); //try thing-on-left to middle, thing-on-right to middle //segmenttree-ify for (ll x = a; x<=b; x++){ if (x!=a){ mxdist = max(mxdist, min( pathlength[b]-pathlength[x]+c, pathlength[x]-pathlength[a] ) + prefixmax[a] + d[x]); } if (x!=b){ mxdist = max(mxdist, min( pathlength[b]-pathlength[x], pathlength[x]-pathlength[a]+c ) + suffixmax[b] + d[x]); } } //try thing-on-middle to thing-on-middle for (ll m = a; m<b; m++){ for (ll n = a+1; n<=b; n++){ //from m to n mxdist = max(mxdist, min( c+pathlength[b]-pathlength[n]+pathlength[m]-pathlength[a], pathlength[n]-pathlength[m] )+d[n]+d[m]); } } //cout<<a<<' '<<b<<": "<<mxdist<<'\n'; mindist = min(mindist, mxdist); } } return mindist; }
#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...