Submission #987543

#TimeUsernameProblemLanguageResultExecution timeMemory
987543vjudge1Overtaking (IOI23_overtaking)C++17
0 / 100
2 ms2552 KiB
#include <bits/stdc++.h> #define rep(a,b,c) for(int a=b; a<c; a++) #define repr(a,b,c) for(int a=b-1; a>c-1; a--) #define repa(a,b) for(auto a:b) #define fi first #define se second #define pii pair<int, int> #define pll pair<ll, ll> #define ll long long #define pb push_back using namespace std; struct buses{ ll m, b, i; ll eval(ll x){ return m*x+b; } bool operator<(buses B){ if(b==B.b) return m<B.m; return b<B.b; } }; ll n, m, h, x, ti[1005][1005], tf[1005][1005], s[1005]; void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S){ n=N, h=L, x=X, m=M; vector<buses> bus; rep(i,0,n) bus.pb({W[i],T[i],i}); rep(i,0,m) s[i]=S[i]; ll l=0, f[n]; rep(j,0,m){ sort(bus.begin(),bus.end()); rep(i,0,n){ bus[i].b=bus[i].eval(S[j]-l); if(i) bus[i].b=max(bus[i-1].b,bus[i].b); f[i]=bus[i].b; } rep(i,0,n){ ti[j][i]=bus[i].b; tf[j][i]=bus[i].i; } l=S[j]; } rep(j,0,m){ rep(i,0,n){ tf[j][i]=f[bus[i].i]; if(i) tf[j][i]=max(tf[j][i-1],tf[j][i]); } } } long long arrival_time(long long Y){ int l=0, r=m-1, mid, L, R, MID; ll dis; while(l<=r){ mid=(l+r)>>1; dis=(x*s[mid])+Y; L=0, R=n-1; while(L<=R){ MID=(L+R)>>1; if(ti[mid][MID]>=dis) R=MID-1; else L=MID+1; } if(L<n) dis=max(dis,ti[mid][L]); dis+=(h-s[mid])*x; if(L==n || tf[mid][R]<=dis) r=mid-1; else l=mid+1; } dis=(x*s[l])+Y; L=0, R=n-1; while(L<=R){ MID=(L+R)>>1; if(ti[l][MID]>=dis) R=MID-1; else L=MID+1; } if(L) dis=max(dis,ti[l][L]); dis+=(h-s[l])*x; return dis; }
#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...