Submission #1020846

#TimeUsernameProblemLanguageResultExecution timeMemory
1020846vjudge1Shortcut (IOI16_shortcut)C++17
31 / 100
2015 ms600 KiB
#include "shortcut.h" #include <bits/stdc++.h> #define ll long long // #define int ll #define pii pair<int,int> #define F first #define S second #define sz(s) (int)s.size() #define in insert #define pb push_back #define all(v) v.begin(),v.end() #define mem(a,i) memset(a,i,sizeof(a)) using namespace std; const int MAX=2e5+10; const ll inf=1e18; int n; ll c; ll pin[MAX]; ll pin1[MAX]; ll get(int l,int r,vector<int> &d){ ll ans=0; // cout<<l<<" "<<r<<"\n"; { ll mx1=-inf; for(int i=0;i<=l;i++){ ans=max(ans,pin[i]+d[i]+mx1); // cout<<pin[i]+d[i]+mx1<<"\n"; mx1=max(mx1,d[i]-pin[i]); } } { ll mx1=-inf; for(int i=0;i<l;i++)mx1=max(mx1,pin[l]-pin[i]+d[i]); for(int i=l;i<=r;i++){ // cout<<mx1+min(pin[i]-pin[l],pin[r]-pin[i]+c)+d[i]<<"\n"; ans=max(ans,mx1+min(pin[i]-pin[l],pin[r]-pin[i]+c)+d[i]); } } { ll mx1=-inf; for(int i=0;i<=l;i++){ mx1=max(mx1,pin[l]-pin[i]+d[i]); } for(int i=r;i<n;i++){ // cout<<pin[i]-pin[r]+min(c,pin[r]-pin[l])+mx1+d[i]<<"\n"; ans=max(ans,pin[i]-pin[r]+min(c,pin[r]-pin[l])+mx1+d[i]); } } // cout<<"!! "<<ans<<"\n"; return ans; } ll calc(int l,int r,vector<int> &d){ ll ans=get(l,r,d); reverse(all(d)); for(int i=0;i<n;i++)swap(pin[i],pin1[i]); ans=max(ans,get(n-r-1,n-l-1,d)); reverse(all(d)); for(int i=0;i<n;i++)swap(pin[i],pin1[i]); return ans; } ll calcmid(int l,int r,vector<int> &d){ ll ans=0; for(int i=l;i<=r;i++){ for(int j=i+1;j<=r;j++){ ll dist=pin[j]-pin[i]; ans=max(ans,min(dist,pin[r]-pin[l]+c-dist)+d[i]+d[j]); } } return ans; } long long find_shortcut(int N, vector<int> l, vector<int> d, int C){ n=N; c=C; ll ans=inf; for(int i=1;i<n;i++){ pin[i]=pin[i-1]+l[i-1]; } for(int i=1;i<n;i++){ pin1[i]=pin1[i-1]+l[n-1-i]; } for(int i=0;i<n;i++){ ll mid=-inf,mid1=-inf; for(int j=i+1;j<n;j++){ ll x=calc(i,j,d); ans=min(ans,max(x,calcmid(i,j,d))); // cout<<x<<" "<<calcmid(i,j,d)<<"\n"; } } return ans; }

Compilation message (stderr)

shortcut.cpp: In function 'long long int find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:91:12: warning: unused variable 'mid' [-Wunused-variable]
   91 |         ll mid=-inf,mid1=-inf;
      |            ^~~
shortcut.cpp:91:21: warning: unused variable 'mid1' [-Wunused-variable]
   91 |         ll mid=-inf,mid1=-inf;
      |                     ^~~~
#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...