제출 #1220691

#제출 시각아이디문제언어결과실행 시간메모리
1220691cpdreamer추월 (IOI23_overtaking)C++17
19 / 100
6 ms8520 KiB
#include "overtaking.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; const long long INF = 1e17; typedef long long ll; const ll MOD = (ll)1e9+7; #define P pair #define F first #define pb push_back #define V vector #define all(v) v.begin(), v.end() struct station { ll t; ll w; }; bool sorted(station a,station b) { if (a.t==b.t) { return a.w>b.w; } return a.t<b.t; } station a[1001][1001],e[1001][1001]; ll s[1001]; int n,m; ll x; void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S) { x=X; n=N,m=M; for (int i=0;i<N;i++) { a[0][i].t=T[i]; a[0][i].w=W[i]; } for (int i=0;i<M;i++) { s[i]=S[i]; } sort(a[0],a[0]+N,sorted); for (int i=0;i<M-1;i++) { for (int j=0;j<N;j++) { e[i+1][j].t=a[i][j].t+(S[i+1]-S[i])*a[i][j].w; e[i+1][j].w=a[i][j].w; } ll maxd[N]; maxd[0]=e[i+1][0].t; for (int j=1;j<N;j++) { maxd[j]=max(maxd[j-1],e[i+1][j].t); } for (int j=0;j<N;j++) { a[i+1][j].t=maxd[j]; a[i+1][j].w=a[i][j].w; } sort(a[i+1],a[i+1]+N,sorted); } } long long arrival_time(long long Y) { ll ans=Y; int curr=-1; for (int i=0;i<n;i++) { if (a[0][i].t<Y || (a[0][i].t==Y && a[0][i].w<x)) { curr++; } } for (int i=1;i<m;i++) { ll b=((s[i]-s[i-1])*x)+ans; if (curr!=-1) { b=max(b,a[i][curr].t); } ans=b; int l=0,r=curr; int f=-1; while (l<=r) { int mid=l+(r-l)/2; if (a[i][mid].t==b && a[i][mid].w<b) { f=mid; r=mid-1; } else l=mid+1; } if (f!=-1) { curr=f-1; } } return ans; }
#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...