题意
题解
将a与b看为2进制数,根据按位与性质易知在a与b不为0的情况下,一定是大于等于
的,只需要判断
此数所剩的2进制位,是否均为a&b为0的2进制位。
code
#include <bits/stdc++.h>
#define reg register
#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
#define inf 0x3f3f3f3f
#define eps 1e-8
#define pi acos(-1.0)
#define e exp(1.0)
#define ios ios::sync_with_stdio(false)
#define rep(i,l,r) for(int i=(l);i<(r);i++)
using namespace std;
const int maxn = 2e5 + 10;
const int mod = 1e9 + 7;
int main()
{
ios;
int t;
cin>>t;
while(t--){
vector<int> v(64);
ll x,y;
cin>>x>>y;
if(x < y){
puts("-1");
continue;
}
else if(x == y){
if(x == 0) puts("0");
else puts("-1");
continue;
}
else if(x < 2 * y){
puts("-1");
continue;
}
for(int i = 0; i < 63;++i){
if((y >> i) & 1) v[i] = 1;
else v[i] = 0;
}
ll sub = x - 2 * y;
for(int i = 62;i >=0;--i){
if(v[i] == 1)continue;
if(sub - (1ll << i) >= 0) sub -= (1ll << i);
}
if(sub == 0) printf("%lld\n",x - 2 * y);
else puts("-1");
}
return 0;
} 
京公网安备 11010502036488号