给定两个数A和B,求最小的X,满足:
A=X+Y
B=X xor Y
xor 表示位运算的异或
异或是不进位的加法,因此A - B 表示的就是X + Y的进位情况。
由于加法得到的进位情况会是异或的两倍。所有 (A - B) / 2 是X 和 Y 的共同都有的部分。所有X可以认为是(A-B)/2/。
int main() { ull a, b; scanf("%llu%llu", &a, &b); if ((a - b) & 1 || a < b) puts("-1"); else printf("%llu %llu", (a - b) >> 1, a - ((a - b) >> 1)); }