您的位置:首页 > 其它

CF 627A. XOR Equation 位运算

2016-04-01 22:05 435 查看
A. XOR Equation

time limit per test
2 seconds

memory limit per test
256 megabytes

input
standard input

output
standard output

Two positive integers a and b have
a sum of s and a bitwise XOR of x.
How many possible values are there for the ordered pair (a, b)?

Input

The first line of the input contains two integers s and x (2 ≤ s ≤ 1012, 0 ≤ x ≤ 1012),
the sum and bitwise xor of the pair of positive integers, respectively.

Output

Print a single integer, the number of solutions to the given conditions. If no solutions exist, print 0.

Examples

input
9 5


output
4


input
3 3


output
2


input
5 2


output
0


Note

In the first sample, we have the following solutions: (2, 7), (3, 6), (6, 3), (7, 2).

In the second sample, the only solutions are (1, 2) and (2, 1).

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#define ysk(x) ((ll)1<<(x))
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
ll s,x;
//思路核心: s=a+b= (a^b)+ 2*(a&b);

int main()
{
while(~scanf("%I64d%I64d",&s,&x))
{
if(s<x|| (s-x)%2 ) {printf("0\n");continue;}//如果s<x肯定不存在
ll ans=1;
for(int i=0;i<63;i++) if(ysk(i)&x)
{
ans*=2;
}

if(s==x&&x) ans-=2;//如果s和x相等,并且x不为0,那么可能会出现(0,s),(s,0),减去2else if(s==x&&!x) ans=0;//如果s和x都为0,不存在

for(int i=0;i<63;i++) if(ysk(i)&x)//检查某一位上是否被重复占用。
{
if(ysk(i)& ((s-x)/2 ) )
{
ans=0;
}
}

printf("%I64d\n",ans);

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: