个人博客:Eloi-还在前进.
D - AND and SUM
题意
给你 a 和 s 。
判断是否存在 非负整数 x y 使得 x+y=s x&y=a
solution
由 按位与的 性质 可知: 可行的 x y 以二进制表示下
在 a 的 为1 的位数下都为 1
在 a 的 为0 的位数下一定不同
由此 易知 :
当(s-2a) & a ==0 时存在
反之 不存在
且需特判当(s-2a)< 0 时直接不存在
ps. 其实就是可行的 x y 除了在 a 为 1的位数上可取
其他位只能一人取一个
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 998244353;
int main()
{
int T;
cin>>T;
while(T--)
{
ll a,s;
cin>>a>>s;
s-=2*a;
if(s<0)
{
cout<<"No"<<endl;
continue;
}
s&=a;
if(s==0) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}