제출 #1233984

#제출 시각아이디문제언어결과실행 시간메모리
1233984mariza추월 (IOI23_overtaking)C++20
65 / 100
3597 ms47268 KiB
#include "overtaking.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1001; #define MID ((l+r)/2) ll n, t[N], w[N], m, s[N], tn; ll z[N]; bool comp(ll a, ll b){ return z[a]<z[b]; } pair<ll,ll> li[N][N]; 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; for(ll i=0; i<n; i++){ t[i]=T[i]; w[i]=W[i]; } tn=X; m=M; for(ll i=0; i<m; i++){ s[i]=S[i]; } ll x[n][m], e[n][m], idx[n]; for(ll i=0; i<n; i++){ x[i][0]=t[i]; idx[i]=i; } for(ll j=1; j<m; j++){ for(ll i=0; i<n; i++){ e[i][j]=x[i][j-1]+w[i]*(s[j]-s[j-1]); z[i]=x[i][j-1]; } sort(idx,idx+n,comp); ll c=0, ans=0; for(ll i=0; i<n; i++){ if(i>0 && x[idx[i]][j-1]>x[idx[i-1]][j-1]) ans=max(ans,c); x[idx[i]][j]=max(e[idx[i]][j],ans); c=max(c,e[idx[i]][j]); } } for(ll j=0; j<m-1; j++){ for(ll i=0; i<n; i++){ li[j][i]={x[i][j],e[i][j+1]}; } sort(li[j],li[j]+n); for(ll i=1; i<n; i++){ li[j][i].second=max(li[j][i].second,li[j][i-1].second); } // cout<<"---"<<j<<"---"<<endl; // for(ll i=0; i<n; i++){ // cout<<li[j][i].first<<" "<<li[j][i].second<<endl; // } // cout<<endl; } return; } long long arrival_time(long long Y){ ll curr=Y; for(ll j=0; j<m-1; j++){ // cout<<curr<<endl; ll l=0, r=n-1, pos=-1; while(l<=r){ if(li[j][MID].first<curr){ pos=MID; l=MID+1; } else r=MID-1; } // cout<<pos<<endl<<endl; if(pos==-1) curr=curr+(s[j+1]-s[j])*tn; else curr=max(curr+(s[j+1]-s[j])*tn,li[j][pos].second); } return curr; }
#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...