8VC Venture Cup 2016 - Final Round (Div. 2 Edition) C. XOR Equation(位运算)(好题*)

题目链接
在这里插入图片描述
题意:两个整数a,b满足a+b=s,a^b=x,求满足条件的a,b的数目
思路:这道题又涨新知识了,有个结论a+b=a^b+(a&b)*2,异或运算其实可以看做没有进位的加法,那么设s-x为d,很显然d从二进制角度来看的话,d如果第i位为1,就代表a+b的第i-1位产生了进位(我这里是从右往左看,最右边为第一位),那么如果d的第i为为0,就代表a和b的第i-1位为不同的,要么0要么1,贡献是2,再根据乘法原理累加答案就行了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s,x,ans=1;
int main()
{
    scanf("%lld %lld",&s,&x);
    ll d=s-x;
    if(s<x||(d&1)) {
    	printf("0\n");return 0;
	}
	for(int i=1;i<=60;++i)
	{
		if((x>>i-1&1)&&(d>>i&1)==0) ans<<=1;
		if((x>>i-1&1)&&(d>>i&1)) {
			printf("0\n");return 0;
		}
	}
	if(!d) ans-=2;
	printf("%lld\n",ans);
}
发布了391 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/105542727