Loading

CodeForces - 76D Plus and xor 位运算

给定两个数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));
}

 

posted @ 2020-08-17 16:33  MQFLLY  阅读(168)  评论(0编辑  收藏  举报