- 分析- 位运算之谜 
 让我来口胡一把。首先a+b的值为x,a&b的值为y,说明a,b最小都得是y。然后就只剩下x - 2 * y供我们分配。- 然后根据与的性质,0&0=0,0&1=0,1&1=1,也就是说,当我们把x - 2 * y表示成二进制,只要随便分这其中的1 
就行了,比如说,14=8+4+2,我可以把8给a,4给b,2给a。但是什么情况是不合法的呢——(x - 2 * y < 0),另一种是
((x - 2 * y ) & y ) > 0。后者,当我们分配后,他们除了y中的几位,还会有其他位上同为1,不合法
- 代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
    int T;scanf("%d",&T);
    while(T--)
    {
        ll x,y;scanf("%lld%lld",&x,&y);
        ll rem=x-2*y;
        if(rem<0||(rem&y)) puts("-1");
        else printf("%lld\n",rem);
    }
    return 0;
}
 京公网安备 11010502036488号
京公网安备 11010502036488号