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
output
input
output
input
output
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;
}
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;
}
相关文章推荐
- 串比较
- 读取相关连接的物理地址
- 1005 买书金钱分配问题
- 几个关键字
- Play framework 2.5新建工程执行日志
- 缓存与组
- C++第二次实验
- Python常用的字符串处理函数
- SQL语句中的查询操作
- Could not connect to Redis No route to host问题解决
- 3月31:蘑菇街实习笔试:求桌子达最大平衡的代价
- RoundCornerTextview2
- windows编程显示客户区窗口分辨率
- 51 Nod 1215 数组的宽度(单调栈)
- iptables 学习笔记
- VJ【并查集】
- poj 2626 三维dp 0 1 bag
- android自定义view实现公章效果
- android自定义view实现公章效果
- 缓冲区溢出攻击