chenfy27的刷题记录

导航

abc238D AND and SUM

给定非负整数a和s,问是否存在一组非负整数(x,y),满足x&y=a,并且x+y=s
0<=a,s<2^60

思路:异或是不进位加法,如果考虑进位,加上按位与的结果左移1位即可,也就是:x+y=(x^y)+((x&y)<<1),代入得x^y=s-2a,并且x&y=a,逐位分析可知,按位与的结果为1时,异或结果必为0。

#include <bits/stdc++.h>
using i64 = long long;

void solve() {
    i64 a, s;
    std::cin >> a >> s;
    if (s < 2 * a) {
        std::cout << "No\n";
        return;
    }
    s -= 2 * a;
    if ((s & a) != 0) {
        std::cout << "No\n";
        return;
    }
    std::cout << "Yes\n";
}

int main() {
    std::cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    std::cin >> t;
    while (t--) solve();
    return 0;
}

posted on 2024-03-07 23:42  chenfy27  阅读(62)  评论(0)    收藏  举报