Submission #424258

#TimeUsernameProblemLanguageResultExecution timeMemory
424258AntekbShortcut (IOI16_shortcut)C++14
31 / 100
2080 ms452 KiB
#include "shortcut.h" #include<bits/stdc++.h> #define st first #define nd second using namespace std; const int N=3005; typedef long long ll; const ll INF=1e18; struct kol{ deque<pair<ll, int> > Q; void push(ll a){ int sum=1; while(Q.size() && Q.back().st>a){ sum+=Q.back().nd; Q.pop_back(); } Q.push_back({a, sum}); } void pop(){ if(!--Q.front().nd)Q.pop_front(); } ll maks(){ if(!Q.size())return -INF; return Q.front().st; } }; ll lew[N], pra[N], tab[N], dist[N], dist2[N], lew2[N], pra2[N]; int C; ll calc(int a, int b){ dist[a]=lew[a]; dist[b]=pra[b]; ll ans=max(pra2[b], lew2[a]); int j=a; kol q; q.push(tab[a]+dist[a]); //cout<<a<<" "<<b<<"\n"; for(int i=a; i<=b; i++){ /*while(j<b && tab[j+1]-tab[i]>=tab[b]-tab[j+1]+C+tab[i]-tab[a]){ q.push(tab[j]+dist[j]); } q.pop(); ans=max(ans, q.maks());*/ for(int j=i+1; j<=b; j++){ //cout<<i<<j<<" "<<dist[i]<<" "<<dist[j]<<" "<<tab[j]-tab[i]<<" "<<tab[b]-tab[j]+C+tab[i]-tab[a]<<"\n"; ans=max(ans, dist[i]+dist[j]+min(tab[j]-tab[i], tab[b]-tab[j]+C+tab[i]-tab[a])); } } dist[a]=dist2[a]; dist[b]=dist2[b]; //cout<<a<<" "<<b<<" "<<ans<<"\n"; return ans; } long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c) { C=c; for(int i=1; i<n; i++){ tab[i]=tab[i-1]+l[i-1]; } for(int i=0; i<n; i++){ dist[i]=dist2[i]=d[i]; lew[i]=d[i]; if(i){ lew[i]=max(lew[i], lew[i-1]+l[i-1]); lew2[i]=max(lew2[i-1], lew[i-1]+d[i]+l[i-1]); } } for(int i=n-1; i>=0; i--){ pra[i]=d[i]; if(i+1<n){ pra[i]=max(pra[i], pra[i+1]+l[i]); pra2[i]=max(pra2[i+1], pra[i+1]+d[i]+l[i]); } } ll ans=INF; for(int i=0; i<n; i++){ for(int j=i+1; j<n; ++j){ ans=min(ans, calc(i, j)); } } return ans; }

Compilation message (stderr)

shortcut.cpp: In function 'll calc(int, int)':
shortcut.cpp:33:6: warning: unused variable 'j' [-Wunused-variable]
   33 |  int j=a;
      |      ^
#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...