Submission #1045474

#TimeUsernameProblemLanguageResultExecution timeMemory
1045474Edu175Shortcut (IOI16_shortcut)C++17
71 / 100
2070 ms2648 KiB
#include <bits/stdc++.h> #define pb push_back #define fst first #define snd second #define fore(i,a,b) for(ll i=a,ioi=b;i<ioi;i++) #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define mset(a,v) memset((a),(v),sizeof(a)) #define imp(v) {for(auto dkfjhg:v)cout<<dkfjhg<<" ";cout<<"\n";} using namespace std; typedef long long ll; typedef pair<ll,ll> ii; const ll INF=1e16; ll n,c; vector<ll>p,d; ll fake=21; ii operator^(ii a, ii b){ return {max(a.fst,b.fst),min(a.snd,b.snd)}; } ll dis(ll i, ll j){ return d[i]+d[j]+abs(p[i]-p[j]); } bool can(ll m){ vector<ii>ed; fore(i,0,n){ vector<ll>idx; fore(j,i+1,n)if(dis(i,j)>m)idx.pb(j); if(SZ(idx)){ ll mn=idx[0],mx=idx[0]; auto cuenta=[&](ll i, ll b){ return d[i]+(b?-1:1)*p[i]; }; for(auto i:idx){ if(cuenta(i,0)>cuenta(mn,0))mn=i; if(cuenta(i,1)>cuenta(mx,1))mx=i; } ed.pb({i,mn}); ed.pb({i,mx}); } } if(!SZ(ed))return 1; ii par=ed[0]; for(auto i:ed)par=par^i; // if(m==fake){ // for(auto [i,j]:ed)cout<<i<<","<<j<<" ";;cout<<"\n"; // } if(par.snd-par.fst<=0)return 0; fore(L,0,n){ ii pa={0,INF}; for(auto [i,j]:ed){ ll rad=m-c-d[i]-d[j]-abs(p[L]-p[i]); pa=pa^ii({p[j]-rad,p[j]+rad}); } // if(l<=r&&m==fake){ // cout<<L<<": "<<l<<","<<r<<"\n"; // } if(lower_bound(ALL(p),pa.fst)<upper_bound(ALL(p),pa.snd)) return 1; } return 0; } long long find_shortcut(int N, std::vector <int> L, std::vector <int> D, int C){ n=N,c=C; vector<ll>a; for(auto i:L)a.pb(i); for(auto i:D)d.pb(i); p=vector<ll>(n); fore(i,1,n)p[i]=p[i-1]+a[i-1]; ll l=0,r=INF; while(l<=r){ ll m=(l+r)/2; if(can(m))r=m-1; else l=m+1; } return l; }
#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...