#JSUTFPC2025I. Bitwise Operation——位运算

Bitwise Operation——位运算

题面描述

Timothy 是一位年轻的计算机科学家,最近在研究二进制运算的奇妙性质。他在整理祖父留下的旧手稿时,发现了一个神秘的数学公式:

(x & y)+(x  y)=T(x \ \&\ y) + (x \ |\ y) = T

其中 TT 表示 "平衡数",位运算符号 &\&| 分别表示按位与,按位或运算。在主流编程语言中使用 & 表示按位与,例如 int c = a \& b 表示为 ca & bc\leftarrow a\ \&\ b,而按位或同理。

准确来说,按位与运算符是这样的规则:只有对应的两个二进位都为 1 时结果位为 1 否则为 0;举个例子:计算5 & 95\ \&\ 9(右下角表示为 10 进制或 2 进制)

$$5_{(10)}\ \&\ 9_{(10)} = 0101_{(2)}\ \&\ 1001_{(2)}=0001_{(2)}=1_{(10)} $$

同理,按位或表示当两个对应位中至少有一个为1时,结果位为1,否则为0。

Timothy 猜测,这个公式可能隐藏着某种二进制位运算的对称性,如果能找到满足条件的最小正整数 yy,就能解开笔记中的下一段密码。

但是,并不是所有的 x,Tx,T 都能找到对应的 yy,如果不存在这样的 yy,就说明这个 xx 与“平衡数”无缘,需要返回 1-1

请你帮助 Timothy 编写程序,对给定的 x,Tx,T,找出最小的正整数 yy,或者判断它不存在。

输入描述

包含一行 2 个数字整数分别表示 x,Tx,T(0x,T1×1018)(0 \leqslant x,T \leqslant 1 \times 10^{18}) 用空格分开。

输出描述

包含一个整数,表示 yy

样例

114514 1919810
1805296
1919810 114514
-1