Submission #823990

#TimeUsernameProblemLanguageResultExecution timeMemory
823990vnm06Shortcut (IOI16_shortcut)C++14
31 / 100
2077 ms340 KiB
#include "shortcut.h" #include<bits/stdc++.h> using namespace std; int N; long long t[508], ct, diam=0; long long dst[508], calc[508]; long long pr[508]; long long pr_le[508], pr_ri[508]; void precalc() { for(int i=1; i<N; i++) pr[i]=pr[i-1]+dst[i]; for(int i=0; i<N; i++) { for(int j=0; j<=i; j++) if(pr[i]-pr[j]+t[j]>pr_le[i]) pr_le[i]=pr[i]-pr[j]+t[j]; for(int j=i; j<N; j++) if(pr[j]-pr[i]+t[j]>pr_ri[i]) pr_ri[i]=pr[j]-pr[i]+t[j]; } } long long find_diam(int le, int ri) { if(le>ri) swap(le, ri); if(ct>pr[ri]-pr[le]) return diam; swap(t[le], pr_le[le]); swap(t[ri], pr_ri[ri]); long long md=0, sum=pr[ri]-pr[le]+ct; for(int i=le; i<=ri; i++) { for(int j=i+1; j<=ri; j++) { long long st1=pr[j]-pr[i]+t[j]+t[i], st2=sum-pr[j]+pr[i]+t[j]+t[i]; if(min(st1, st2)> md) md=min(st1, st2); } } swap(t[le], pr_le[le]); swap(t[ri], pr_ri[ri]); for(int i=0; i<=le; i++) { for(int j=i+1; j<=le; j++) if(md<t[i]+t[j]+pr[j]-pr[i]) md=t[i]+t[j]+pr[j]-pr[i]; } for(int i=ri; i<N; i++) { for(int j=i+1; j<N; j++) if(md<t[i]+t[j]+pr[j]-pr[i]) md=t[i]+t[j]+pr[j]-pr[i]; } return md; } int bst1[508]; int bst2[508]; stack<pair<int, int> > st; long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c) { N=n; ct=c; for(int i=0; i<n; i++) t[i]=d[i]; for(int i=1; i<n; i++) dst[i]=l[i-1]; precalc(); for(int i=0; i<n; i++) diam=max(diam, t[i]+pr_ri[i]); ///cout<<diam<<endl; ///for(int i=0; i<n; i++) cout<<pr_le[i]<<" "<<pr_ri[i]<<endl; for(int i=0; i<n; i++) { bst1[i]=i; bst2[i]=n; calc[i]=diam; for(int j=i+1; j<n; j++) { if(i && j<bst1[i-1]-2) continue; long long nd=find_diam(i, j); if(nd<calc[i]) { calc[i]=nd; bst1[i]=j; bst2[i]=j; } else if(nd==calc[i]) bst2[i]=j; } } ///for(int i=0; i<n; i++) cout<<calc[i]<<" "<<bst[i]<<endl; long long mid=1e18; for(int i=0; i<n; i++) if(calc[i]<mid) mid=calc[i]; return mid; return mid; }
#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...