比赛 集训 评测结果 TTTEEWWEEE
题目名称 镜牢 最终得分 0
用户昵称 OTTF 运行时间 6.252 s
代码语言 C++ 内存使用 44.52 MiB
提交时间 2025-07-03 10:18:10
显示代码纯文本

#include <cstdio>
#include <iostream>
#include <map>

using namespace std;

constexpr int N = 51145;

int n;
long long a[N];
long long b[N];
bool c[N];
map<long long, long long> dp[N];

long long dfs (int id, long long now) {
	if (id > n) {
		return dp[id][now] = now;
	}

	long long num1 = now ^ a[id];
	long long num2 = now ^ b[id];
	long long res1, res2;

	if (dp[id + 1].count(num1)) {
		res1 = dp[id + 1][num1];
	}
	else {
		res1 = dfs (id + 1, num1);
	}
	if (dp[id + 1].count(num2)) {
		res2 = dp[id + 1][num2];
	}
	else {
		res2 = dfs (id + 1, num2);
	}

	if (c[id]) {
		return dp[id][now] = max (res1, res2);
	}
	return dp[id][now] = min (res1, res2);
}

int main () {
	
	freopen ("mirror.in", "r", stdin);
	freopen ("mirror.out", "w", stdout);

	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++) {
		cin >> b[i];
	}
	for (int i = 1; i <= n; i++) {
		cin >> c[i];
	}

	cout << dfs (1, 0) << endl;
	
	return 0;
}