Submission #817851

#TimeUsernameProblemLanguageResultExecution timeMemory
817851mosiashvililukaShortcut (IOI16_shortcut)C++14
31 / 100
2067 ms384 KiB
#include<bits/stdc++.h> #include "shortcut.h" using namespace std; const int ZM=/*1000009*/100009; const long long N=999999999999999999LL; long long a,b,c,d,e,i,j,ii,jj,zx,xc,dis[ZM],JM[ZM],C,pas,PR[ZM],SF[ZM]; long long ansPR[ZM],ansSF[ZM]; /*long long dista(int j, int i){ c=JM[i]-JM[j]+dis[i]+dis[j]; d=JM[j]-JM[q]+C+JM[w]-JM[i]+dis[i]+dis[j]; }*/ pair <pair <long long, long long>, long long> DO(int q, int w){ long long Qw=dis[q],We=dis[w]; long long pas1=0,pas2=0; /*dis[q]=max(dis[q],JM[q]); dis[w]=max(dis[w],JM[a]-JM[w]);*/ dis[q]=PR[q]+JM[q]; dis[w]=SF[w]-JM[w]; // long long i,j,zx,c,d; for(i=q+1; i<=w; i++){ zx=0; for(j=q; j<i; j++){ c=JM[i]-JM[j]+dis[i]+dis[j]; d=JM[j]-JM[q]+C+JM[w]-JM[i]+dis[i]+dis[j]; zx=max(zx,min(c,d)); } if(i<w){ pas1=max(pas1,zx); }else{ pas2=max(pas2,zx); } } pas2=max(pas2,ansSF[w]); // dis[q]=Qw;dis[w]=We; return {{pas1,pas2},ansPR[q]}; //return /*ragac*/; } long long find_shortcut(int Nn, std::vector<int> Ll, std::vector<int> Dd, int Cc) { a=Nn;C=Cc;pas=N; JM[1]=0; for(i=1; i<=a; i++){ dis[i]=Dd[i-1]; if(i<a){ JM[i+1]=JM[i]+Ll[i-1]; } } for(i=1; i<=a; i++){ PR[i]=dis[i]-JM[i]; if(i!=1) PR[i]=max(PR[i],PR[i-1]); } for(i=a; i>=1; i--){ SF[i]=dis[i]+JM[i]; if(i!=a) SF[i]=max(SF[i],SF[i+1]); } for(i=2; i<=a; i++){ ansPR[i]=ansPR[i-1]; for(j=1; j<i; j++){ zx=JM[i]-JM[j]+dis[i]+dis[j]; ansPR[i]=max(ansPR[i],zx); } } for(i=a-1; i>=1; i--){ ansSF[i]=ansSF[i+1]; for(j=a; j>i; j--){ zx=JM[j]-JM[i]+dis[i]+dis[j]; ansSF[i]=max(ansSF[i],zx); } } for(i=1; i<=a; i++){ for(j=i+1; j<=a; j++){ pair <pair <long long, long long>, long long> P=DO(i,j); //cout<<i<<" "<<j<<" "<<P.first.first<<" "<<P.first.second<<"\n"; pas=min(pas,max(max(P.first.first,P.first.second),P.second)); } } return pas; }
#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...