#include "train.h"
#include <bits/stdc++.h>
using namespace std;
#define sig signed
#define int long long
#define arr array
#define vec vector
const int N = 5e3 + 5;
int n, m;
arr<bool, N> a, ch;
arr<bool, N> cyc, lst;
vec<int> a_wn, b_wn;
vec<sig> who_wins(vec<sig> _a, vec<sig> _ch, vec<sig> _u, vec<sig> _v) {
n = _a.size(), m = _u.size();
for (int u = 1; u <= n; u++) a[u] = _a[u - 1], ch[u] = _ch[u - 1];
lst.fill(true);
for (int i = 1; i <= m; i++) {
int u = _u[i - 1] + 1, v = _v[i - 1] + 1;
if (u == v) cyc[u] = true;
else lst[u] = false;
}
for (int u = 1; u <= n; u++) {
if (cyc[u] && ch[u] && a[u]) a_wn.push_back(u);
if (cyc[u] && ch[u] && lst[u] && !a[u]) a_wn.push_back(u);
if (cyc[u] && !ch[u] && !a[u]) b_wn.push_back(u);
if (cyc[u] && !ch[u] && lst[u] && a[u]) b_wn.push_back(u);
}
vec<sig> ans;
for (int u = 1; u <= n; u++) {
int i = lower_bound(a_wn.begin(), a_wn.end(), u) - a_wn.begin();
int j = lower_bound(b_wn.begin(), b_wn.end(), u) - b_wn.begin();
if (i == a_wn.size()) ans.push_back(0);
else if (j == b_wn.size()) ans.push_back(1);
else if (a_wn[i] < b_wn[j]) ans.push_back(1);
else ans.push_back(0);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |