제출 #1143957

#제출 시각아이디문제언어결과실행 시간메모리
1143957gyg장난감 기차 (IOI17_train)C++20
5 / 100
3 ms840 KiB
#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 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...