#P15134. [ROIR 2026] XOR 染色

[ROIR 2026] XOR 染色

题目描述

给定两个非负整数数组 A=[a1,a2,,an]A=[a_1, a_2, \ldots, a_n]B=[b1,b2,,bm]B=[b_1, b_2, \ldots, b_m]

定义 S(i)={j(aibj)x}S(i) = \{j | (a_i \oplus b_j) \leq x\}。换句话说,S(i)S(i) 是数组 BB 中所有满足 aia_ibjb_j 的按位异或结果不超过 xx 的下标 jj 的集合。

请求出最小的数字 kk,使得可以将数组 AA 中的元素染成 kk 种颜色,且满足:如果 S(x)S(x)S(y)S(y) 相交,则 xxyy 必须被染成不同的颜色。

换言之,需要找到 c1,c2,,cnc_1, c_2, \ldots, c_n,使得 1cik1 \le c_i \le k,并且如果 S(x)S(y)S(x) \cap S(y) \neq \varnothing,则 cxcyc_x \neq c_y

提醒一下,两个非负整数的按位“异或”(\oplus,xor)定义如下:将两个数写作二进制形式,结果的第 ii 个二进制位为 1,当且仅当两个参数中恰好有一个在该位为 1。例如,$(14 \text{ xor } 7) = (1110_2 \oplus 0111_2) = 1001_2 = 9$。该操作在所有现代编程语言中都有实现,在 C++、Java 和 Python 中写作 ^,在 Pascal 中写作 xor。

输入格式

此题的输入包含多个测试用例。

输入的第一行包含一个整数 tt (1t100)(1 \le t \le 100) —— 测试用例的数量。

接下来是各个测试用例的描述。

每个测试用例的第一行包含三个整数 nnmmxx1n,m5000001 \le n, m \le 500\,0000x<2300 \leq x < 2^{30})。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n —— 数组 AA 的元素(0ai<2300 \le a_i < 2^{30})。

第三行包含 mm 个整数 b1,b2,,bmb_1, b_2, \ldots, b_m —— 数组 BB 的元素(0bi<2300 \le b_i < 2^{30})。

保证所有测试用例的 nn 值之和以及 mm 值之和均不超过 500000500\,000

输出格式

对于每个测试用例,输出一个整数 —— 所求的最小 kk

3
2 2 0
0 0
1 1
5 5 3
0 1 2 3 4
0 1 2 3 4
5 5 4
0 1 2 3 4
0 1 2 3 4
1
4
5

提示

评分规则

子任务 分值 额外限制 必要子任务
1 5 n2n \le 2 ---
2 n5n \le 5 1
3 n15n \le 15 1, 2
4 n100n \le 100 1–3
5 n2000n \le 2\,000 1–4
6 10 n5000n \le 5\,000 1–5
7 5 n100000n \le 100\,000m=2m = 2 ---
8 10 n100000n \leq 100\,000m=3m = 3
9 5 n,m100000n, m \le 100\,000ai,bi,k<2a_i, b_i, k < 2
10 n,m100000n, m \le 100\,000ai,bi,k<4a_i, b_i, k < 4 9
11 35 无额外限制 1–10