Codeforces 627A XOR Equation
2016-09-20 18:29
281 查看
XOR Equation
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
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.
Sample Input
Input
Output
Input
Output
Input
Output
Hint
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).
ai bi ai^bi ai&bi
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
当ai&bi为1时,只有一种情况,ai,bi都为1
当ai&bi为0时,如果ai^bi为0,也只有一种情况
如果ai^bi为1,会有两种情况
当n为0时,算出的结果存在两种情况a为0,b为s,与a为s,b为0,要求a,b为正,故应减去这两种
在进行判断时如果出现1 1的情况则不存在
#include<stdio.h>
#define LL long long
int main()
{
LL s,x,n,ans;
int i;
while(~scanf("%lld%lld",&s,&x))
{
n=s-x;
ans=1;
if(n<0||n%2)
ans=0;
else
{
n>>=1;
for(i=0;i<60;i++)
{
if(((n>>i)&1)&&((x>>i)&1))
{
ans=0;
break;
}
if(!((n>>i)&1)&&((x>>i)&1))
ans<<=1;
}
if(!n)
ans-=2;
}
printf("%lld\n",ans);
}
return 0;
}
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
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.
Sample Input
Input
9 5
Output
4
Input
3 3
Output
2
Input
5 2
Output
0
Hint
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).
ai bi ai^bi ai&bi
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
当ai&bi为1时,只有一种情况,ai,bi都为1
当ai&bi为0时,如果ai^bi为0,也只有一种情况
如果ai^bi为1,会有两种情况
当n为0时,算出的结果存在两种情况a为0,b为s,与a为s,b为0,要求a,b为正,故应减去这两种
在进行判断时如果出现1 1的情况则不存在
#include<stdio.h>
#define LL long long
int main()
{
LL s,x,n,ans;
int i;
while(~scanf("%lld%lld",&s,&x))
{
n=s-x;
ans=1;
if(n<0||n%2)
ans=0;
else
{
n>>=1;
for(i=0;i<60;i++)
{
if(((n>>i)&1)&&((x>>i)&1))
{
ans=0;
break;
}
if(!((n>>i)&1)&&((x>>i)&1))
ans<<=1;
}
if(!n)
ans-=2;
}
printf("%lld\n",ans);
}
return 0;
}
相关文章推荐
- Dagger2 最清晰的使用教程
- Spark与Hive的交互
- Kinect开发学习笔记之(一)Kinect介绍和应用
- iOS10推送通知适配
- SpringBoot配置文件application.properties
- vim小技巧--针对换行符进行操作
- PHP 基础知识总结一
- 第四周项目5-猴子选大王
- Eratosthenes筛法生成素数表
- 搭建自己的Tomcat服务器
- 雍慧A38t读取串口/dev/ttyS1没有权限
- October 大坑小坑
- 装饰者模式
- 将本地数据库里的表上传至服务器
- [最大费用可行流 || 单纯形] BZOJ 3118 Orz the MST
- Spring属性注入Bean的List属性
- PHP 编码规范
- 原型模式
- sql输入单引号总显示错误 为什么
- 实用SQL语句大全