제출 #134794

#제출 시각아이디문제언어결과실행 시간메모리
134794ckodserShortcut (IOI16_shortcut)C++14
31 / 100
2031 ms504 KiB
#include "shortcut.h" #include<bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define pii pair<ll,ll> #define F first #define S second #define ld long double using namespace :: std; const ll maxn=1e5+500; const ll inf=1e17+900; ll pos[maxn]; ll farr[maxn]; ll farl[maxn]; ll dr[maxn]; ll dl[maxn]; long long find_shortcut(int N,vector<int> L,vector<int> D, int C) { ll c=C; ll n=N; vector<ll> l; vector<ll> d; for(auto v:L){ l.pb(v); } for(auto v:D){ d.pb(v); } pos[0]=0; for(ll i=1;i<n;i++){ pos[i]=pos[i-1]+l[i-1]; } dl[0]=d[0]; farl[0]=d[0]; for(ll i=1;i<n;i++){ farl[i]=max((ll)d[i],farl[i-1]+l[i-1]); dl[i]=max(dl[i-1],farl[i-1]+l[i-1]+d[i]); } dr[n-1]=d[n-1]; farr[n-1]=d[n-1]; for(ll i=n-2;i>=0;i--){ farr[i]=max((ll)d[i],farr[i+1]+l[i]); dr[i]=max(dr[i+1],farr[i+1]+l[i]+d[i]); } ll ans=inf; for(ll i=0;i<n;i++){ for(ll j=i+1;j<n;j++){ ll res=max(dr[j],dl[i]); ll sdi=d[i]; ll sdj=d[j]; d[j]=farr[j]; d[i]=farl[i]; ll tol=c+pos[j]-pos[i]; for(ll u=i;u<=j;u++){ for(ll v=u+1;v<=j;v++){ res=max(res,(ll)d[v]+(ll)d[u]+min(pos[v]-pos[u],tol-(pos[v]-pos[u]))); } } ans=min(ans,res); d[j]=sdj; d[i]=sdi; } } 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...