CF2077F AND x OR
题目描述
假设你有两个长度均为 $k$ 的数组 $c$ 和 $d$。当且仅当 $c$ 可以通过以下操作任意次变换为 $d$ 时,称这对数组 $(c, d)$ 是好的:
- 选择两个不同的下标 $i$ 和 $j$($1 \leq i, j \leq k$,$i \neq j$)以及一个非负整数 $x$($0 \leq x < 2^{30}$)。然后执行以下变换:
- $c_i := c_i \mathbin{\&} x$(其中 $\&$ 表示[按位与运算](https://en.wikipedia.org/wiki/Bitwise_operation#AND))
- $c_j := c_j \mathbin{|} x$(其中 $|$ 表示[按位或运算](https://en.wikipedia.org/wiki/Bitwise_operation#OR))
给定两个长度为 $n$ 的数组 $a$ 和 $b$,其中元素均为不超过 $m$ 的非负整数。你可以对这两个数组进行任意次以下两种操作:
1. 选择一个下标 $i$($1 \leq i \leq n$),令 $a_i := a_i + 1$
2. 选择一个下标 $i$($1 \leq i \leq n$),令 $b_i := b_i + 1$
注意在执行操作过程中,$a$ 和 $b$ 的元素可能会超过 $m$。
求使得数组对 $(a, b)$ 成为好的数组对所需的最小操作次数。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数量 $t$($1 \le t \le 10^4$)。接下来描述每个测试用例。
每个测试用例的第一行输入两个整数 $n$ 和 $m$($1 \leq n, m \leq 2 \times 10^6$)——分别表示数组 $a$ 和 $b$ 的长度,以及数组中元素的最大初始值。
第二行输入 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i \leq m$)——表示数组 $a$。
第三行输入 $n$ 个整数 $b_1, b_2, \ldots, b_n$($0 \leq b_i \leq m$)——表示数组 $b$。
保证所有测试用例的 $n$ 总和与 $m$ 总和均不超过 $2 \times 10^6$。
输出格式
对于每个测试用例,输出一个整数——使得数组对 $(a, b)$ 成为好的数组对所需的最小操作次数。
说明/提示
第一个测试用例中,已有 $a = b$。
第二个测试用例中,可以对下标 $i=2$ 执行两次操作 2。数组 $b$ 将变为 $[8, 8, 32]$,此时 $(a, b)$ 成为好的数组对。
第三个测试用例中,可以对下标 $i=1$ 执行一次操作 2,再对下标 $i=2$ 执行一次操作 1。可以证明无法用少于 2 次操作使 $(a, b)$ 成为好的数组对。
翻译由 DeepSeek R1 完成