CF1064B 【Equations of Mathematical Magic】

题目要求解$a-(a\oplus x)-x=0$的解$x$的个数

移项得$a-x=a\oplus x$

$a$的二进制形式,应该是一个$01$串,异或的过程是不能影响到两个不同的位的,所以我们按位考虑

如果这一位是$0$,那么$x$的这一位也应为$0$,使得异或后答案不会更大

如果这一位是$1$,那么$x$的这一位可以为$0$或$1$,对应到减法中就是没减和减掉

所以答案就是$2^{count~~1~~in~~a}$

#include<iostream>
#include<cstdio>
using namespace std;
int t,a;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&a);
        int ans=1;
        while(a)
        {
            if(a%2)
                ans*=2;
            a/=2;
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

posted @ 2018-10-15 16:57  Ivanovcraft  阅读(158)  评论(0编辑  收藏  举报