链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
给定两个整数a 和 s,问是否存在两个非负整数满足:
x&y=a
x+y=s
如果存在,输出 `Yes`,如果不存在输出`No`。
因为本题比较简单,数据给了多次查询。
输入描述:
输出描述:
示例:
输入:
2
1 8
4 2
输出:
Yes
No
思路:首先要知道二进制的加法可以变成 x + y = x ^ y + (x & y)*2;下面图片是一个解释例子
所以此题,d=s-2*a的值就是异或所得的值 ,因为a和s都是大于0的数,所以s-2a也要大于0;另外还可以发现异或和与的每一位相与都为0,也就是d&a等于0
代码:
#include<bits/stdc++.h>#define int long longusing namespace std;signed main(){int t;cin>>t;while(t--){int a,s;cin>>a>>s;int d=s-2*a; //异或值if(d<0||(d&a)){cout<<"No\n";}else cout<<"Yes\n";}}
算法小白一枚,如有不对之处,请大家指正。