Submission #1022710

#TimeUsernameProblemLanguageResultExecution timeMemory
1022710thinknoexitOvertaking (IOI23_overtaking)C++17
65 / 100
3546 ms34384 KiB
#include "overtaking.h" #include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 1010; struct A { ll t, s; int idx; bool operator < (const A& o) const { return t < o.t; } } a[N][N]; ll pref[N][N], s[N]; int n, m; ll X; void init(int L, int NN, vector<ll> T, vector<int> W, int X, int M, vector<int> S) { n = NN; m = M; ::X = X; for (int i = 0;i < m;i++) { s[i] = S[i]; } for (int i = 0;i < n;i++) { a[0][i] = { T[i], W[i], i }; } for (int K = 0;K < m - 1;K++) { sort(a[K], a[K] + n); int idx = 0; ll mx = 0; for (int i = 0, j;i < n;i = j) { for (j = i;j < n && a[K][i].t == a[K][j].t;j++) { a[K + 1][idx++] = { max(a[K][j].t + a[K][j].s * (s[K + 1] - s[K]), mx) , a[K][j].s, a[K][j].idx }; } for (j = i;j < n && a[K][i].t == a[K][j].t;j++) { mx = max(mx, a[K][j].t + a[K][j].s * (s[K + 1] - s[K])); } for (j = i;j < n && a[K][i].t == a[K][j].t;j++) { pref[K][j] = mx; } } } sort(a[m - 1], a[m - 1] + n); } ll arrival_time(ll Y) { ll now = Y; for (int i = 0;i < m - 1;i++) { ll mx = now + X * (s[i + 1] - s[i]); { int l = -1, r = n - 1; while (l < r) { int mid = (l + r + 1) >> 1; if (a[i][mid].t < now) l = mid; else r = mid - 1; } if (l != -1) mx = max(mx, pref[i][min(l, n - 1)]); } now = mx; } return now; }
#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...