CF2115D Gellyfish and Forget-Me-Not

题目描述

Gellyfish 和 Flower 正在玩一个游戏。 该游戏包含两个长度为 $n$ 的整数数组 $a_1,a_2,\ldots,a_n$ 和 $b_1,b_2,\ldots,b_n$,以及一个长度为 $n$ 的二进制字符串 $c_1c_2\ldots c_n$。 还有一个整数 $x$,初始值为 $0$。 游戏进行 $n$ 回合。对于 $i = 1,2,\ldots,n$,每一回合如下进行: 1. 如果 $c_i = 0$,那么 Gellyfish 是该回合的操作者。否则,如果 $c_i = 1$,那么 Flower 是该回合的操作者。 2. 当前操作者必须执行以下两个操作之一: * 将 $x := x \oplus a_i$; * 将 $x := x \oplus b_i$。 这里,$⊕$ 表示[按位异或操作](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 Gellyfish 希望使 $x$ 的最终值尽可能小,而 Flower 则希望使它尽可能大。 如果双方都采取最优策略,求 $n$ 回合后 $x$ 的最终值。

输入格式

每个测试包含多个测试用例。第一行是一个整数 $t$($1 \le t \le 10^4$)——测试用例的数量。接下来的内容为各个测试用例的描述。 每个测试用例的第一行是一个整数 $n$($1 \le n \le 10^5$)——游戏的回合数。 第二行包含 $n$ 个整数 $a_1, a_2, ..., a_n$($0 \le a_i < 2^{60}$)。 第三行包含 $n$ 个整数 $b_1, b_2, ..., b_n$($0 \le b_i < 2^{60}$)。 第四行是一个长度为 $n$ 的二进制字符串 $c$。 保证所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

对于每个测试用例,输出一行一个整数,表示所有 $n$ 回合结束后 $x$ 的最终值。

说明/提示

在第一个测试用例中,只有一轮,且 Gellyfish 是操作者。因此她会选择 $a_1$,最终 $x = 0$。 在第二个测试用例中,Flower 是两轮的操作者。她可以选择 $a_1$ 和 $b_2$,最终 $x = a_1 ⊕ b_2 = 15$。她也可以选择 $b_1$ 和 $a_2$,此时 $x = a_2 ⊕ b_1 = 15$,结果相同。 在第三个测试用例中,$a_1 = b_1$,因此 Gellyfish 无论怎么选都一样。在第二轮: * 若 Flower 选择 $a_2$,则 $x$ 变成 $7$,Gellyfish 选择 $b_3$,最终 $x = 4$; * 若 Flower 选择 $b_2$,则 $x$ 变成 $4$,Gellyfish 选择 $a_3$,最终 $x = 6$。 Flower 想要最大化 $x$,因此她会选 $b_2$,最终 $x = 6$。