题意

题解

将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;
}