CF1874B Jellyfish and Math

题目描述

水母得到了非负整数 $a$、$b$、$c$、$d$ 和 $m$。初始时 $(x, y) = (a, b)$。水母希望通过若干次操作使得 $(x, y) = (c, d)$。 每次操作,她可以进行以下之一: - $x := x\,\&\,y$, - $x := x\,|\,y$, - $y := x \oplus y$, - $y := y \oplus m$。 其中 $\&$ 表示[按位与运算](https://en.wikipedia.org/wiki/Bitwise_operation#AND),$|$ 表示[按位或运算](https://en.wikipedia.org/wiki/Bitwise_operation#OR),$\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 现在水母想知道,使得 $(x, y) = (c, d)$ 至少需要多少次操作。如果无法实现,输出 $-1$。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 $t$($1 \leq t \leq 10^5$),表示测试用例的数量。 接下来每组测试用例一行,包含五个整数 $a$、$b$、$c$、$d$ 和 $m$($0 \leq a, b, c, d, m < 2^{30}$)。

输出格式

对于每组测试用例,输出一个整数,表示最少操作次数。如果无法实现,输出 $-1$。

说明/提示

在第一个测试用例中,我们可以进行操作 $y = x \oplus y$。 在第二个测试用例中,无法通过任何操作序列将 $(x, y) = (1, 2)$ 变为目标状态。 在第三个测试用例中,我们可以先进行 $x = x\,\&\,y$,然后进行 $y = y \oplus m$。 由 ChatGPT 4.1 翻译