P15134 [ROIR 2026] XOR 染色

题目描述

给定两个非负整数数组 $A=[a_1, a_2, \ldots, a_n]$ 和 $B=[b_1, b_2, \ldots, b_m]$。 定义 $S(i) = \{j | (a_i \oplus b_j) \leq x\}$。换句话说,$S(i)$ 是数组 $B$ 中所有满足 $a_i$ 与 $b_j$ 的按位异或结果不超过 $x$ 的下标 $j$ 的集合。 请求出最小的数字 $k$,使得可以将数组 $A$ 中的元素染成 $k$ 种颜色,且满足:如果 $S(x)$ 与 $S(y)$ 相交,则 $x$ 和 $y$ 必须被染成不同的颜色。 换言之,需要找到 $c_1, c_2, \ldots, c_n$,使得 $1 \le c_i \le k$,并且如果 $S(x) \cap S(y) \neq \varnothing$,则 $c_x \neq c_y$。 提醒一下,两个非负整数的按位“异或”($\oplus$,xor)定义如下:将两个数写作二进制形式,结果的第 $i$ 个二进制位为 1,当且仅当两个参数中恰好有一个在该位为 1。例如,$(14 \text{ xor } 7) = (1110_2 \oplus 0111_2) = 1001_2 = 9$。该操作在所有现代编程语言中都有实现,在 C++、Java 和 Python 中写作 `^`,在 Pascal 中写作 xor。

输入格式

此题的输入包含多个测试用例。 输入的第一行包含一个整数 $t$ $(1 \le t \le 100)$ —— 测试用例的数量。 接下来是各个测试用例的描述。 每个测试用例的第一行包含三个整数 $n$、$m$ 和 $x$($1 \le n, m \le 500\,000$,$0 \leq x < 2^{30}$)。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$ —— 数组 $A$ 的元素($0 \le a_i < 2^{30}$)。 第三行包含 $m$ 个整数 $b_1, b_2, \ldots, b_m$ —— 数组 $B$ 的元素($0 \le b_i < 2^{30}$)。 保证所有测试用例的 $n$ 值之和以及 $m$ 值之和均不超过 $500\,000$。

输出格式

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

说明/提示

### 评分规则 | 子任务 | 分值 | 额外限制 | 必要子任务 | |:-:|:-:|:-:|:-:| | 1 | 5 | $n \le 2$ | --- | | 2 | 5 | $n \le 5$ | 1 | | 3 | 5 | $n \le 15$ | 1, 2 | | 4 | 5 | $n \le 100$ | 1–3 | | 5 | 5 | $n \le 2\,000$ | 1–4 | | 6 | 10 | $n \le 5\,000$ | 1–5 | | 7 | 5 | $n \le 100\,000$,$m = 2$ | --- | | 8 | 10 | $n \leq 100\,000$,$m = 3$ | --- | | 9 | 5 | $n, m \le 100\,000$;$a_i, b_i, k < 2$ | --- | | 10 | 10 | $n, m \le 100\,000$;$a_i, b_i, k < 4$ | 9 | | 11 | 35 | 无额外限制 | 1–10 |