#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∣(ai⊕bj)≤x}S(i) = \{j | (a_i \oplus b_j) \leq x\}。换句话说,S(i)S(i) 是数组 BB 中所有满足 aia_i 与 bjb_j 的按位异或结果不超过 xx 的下标 jj 的集合。

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

换言之,需要找到 c1,c2,…,cnc_1, c_2, \ldots, c_n,使得 1≤ci≤k1 \le c_i \le k,并且如果 S(x)∩S(y)≠∅S(x) \cap S(y) \neq \varnothing,则 cx≠cyc_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 (1≤t≤100)(1 \le t \le 100) —— 测试用例的数量。

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

每个测试用例的第一行包含三个整数 nn、mm 和 xx(1≤n,m≤500 0001 \le n, m \le 500\,000,0≤x<2300 \leq x < 2^{30})。

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

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

保证所有测试用例的 nn 值之和以及 mm 值之和均不超过 500 000500\,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 n≤2n \le 2 ---
2 n≤5n \le 5 1
3 n≤15n \le 15 1, 2
4 n≤100n \le 100 1–3
5 n≤2 000n \le 2\,000 1–4
6 10 n≤5 000n \le 5\,000 1–5
7 5 n≤100 000n \le 100\,000,m=2m = 2 ---
8 10 n≤100 000n \leq 100\,000,m=3m = 3
9 5 n,m≤100 000n, m \le 100\,000;ai,bi,k<2a_i, b_i, k < 2
10 n,m≤100 000n, m \le 100\,000;ai,bi,k<4a_i, b_i, k < 4 9
11 35 无额外限制 1–10