题目意思就是给定a,求a−(a⊕x)−x=0 这个方程的解的个数。
首先可以对这个方程变形可以得到a-x=a⊕x.相当于是a和x之间的相减得到的值和a异或x的值相等,即2种操作等效。
因为x>=0,a>=0,所以a⊕x>=0,因此a-x>=0,即a>=x,综合得a>=x>=0。然后把a和x都变成2进制形式来考虑,当ai==0,xi==1的话
ai^xi==1,而ai-xi==-1,可知这种情况下对第i位数字而言异或操作和相减操作是不等效的,在这种情况下不管x的其他位取什么,
都有a-x!=a⊕x,即方程不可能成立,不存在解,由此可得ai==0时,对应的xi不能取1,类似的我们可以知道1.ai==0时,xi只可以
取0。2.ai==1时,xi可以取0或者取1。也就是x的每个二进制位取值,按照以上2种规则,x才是方程的解,x的个数就是2的cnt次方,cnt即是a对应的二进制里1的个数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int ans,t,a;
scanf("%d",&t);
while(t--)
{
ans=1;
scanf("%d",&a);
while(a)
{
if(a&1)
ans*=2;
a=a>>1;
}
printf("%d
",ans);
}
return 0;
}