题意
题解
将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; }