AT_abc347_d [ABC347D] Popcount and XOR

题目描述

给定非负整数 $a$、$b$、$C$。请判断是否存在满足以下 $5$ 个条件的非负整数对 $(X, Y)$,如果存在,请输出其中一组。 - $0 \leq X < 2^{60}$ - $0 \leq Y < 2^{60}$ - $\operatorname{popcount}(X) = a$ - $\operatorname{popcount}(Y) = b$ - $X \oplus Y = C$ 其中,$\oplus$ 表示按位异或运算。 popcount 是什么?对于非负整数 $x$,$x$ 的 popcount 是指 $x$ 用二进制表示时 $1$ 的个数。更严格地说,对于非负整数 $x$,若 $x = \sum_{i=0}^{\infty} b_i 2^i \ (b_i \in \lbrace 0, 1 \rbrace)$,则 $\operatorname{popcount}(x) = \sum_{i=0}^{\infty} b_i$。 例如,$13$ 的二进制表示为 `1101`,所以 $\operatorname{popcount}(13) = 3$。 什么是按位异或?对于非负整数 $x, y$,$x, y$ 的按位异或 $x \oplus y$ 定义如下: - $x \oplus y$ 的二进制表示中 $2^k\ (k \geq 0)$ 位,如果 $x, y$ 的二进制表示中 $2^k$ 位只有一方为 $1$,则该位为 $1$,否则为 $0$。 例如,$9, 3$ 的二进制分别为 `1001`, `0011`,所以 $9 \oplus 3 = 10$($10$ 的二进制为 `1010`)。

输入格式

输入为一行,包含三个整数: > $a$ $b$ $C$

输出格式

如果存在满足条件的非负整数对,则任选一组 $(X, Y)$,按顺序用空格分隔输出 $X$ 和 $Y$。如果不存在,输出 `-1`。

说明/提示

### 限制 - $0 \leq a \leq 60$ - $0 \leq b \leq 60$ - $0 \leq C < 2^{60}$ - 输入均为整数 ### 样例解释 1 $(X, Y) = (28, 27)$ 满足条件。$X, Y$ 的二进制分别为 `11100` 和 `11011`。 - $X$ 的二进制为 `11100`,所以 $\operatorname{popcount}(X) = 3$。 - $Y$ 的二进制为 `11011`,所以 $\operatorname{popcount}(Y) = 4$。 - $X \oplus Y$ 的二进制为 `00111`,即 $X \oplus Y = 7$。 由于满足条件的整数对可能有多个,例如输出 `42 45` 也是正确答案。 ### 样例解释 2 不存在满足条件的整数对。 ### 样例解释 3 输出的值可能超出 $32$ 位整数的范围。 由 ChatGPT 4.1 翻译