【找规律】Codeforces Round #516 B. Equations of Mathematical Magic

【找规律】Codeforces Round #516 B. Equations of Mathematical Magic

题意:
给出一个a,求使得题中等式成立的x的个数。

思路:
将等式转化一下:
a = a ⊕ x + x a=a⊕x+x a=ax+x
说明a是a跟x的二级制互为空集位的结果再与x取并。
也就是说二进制下,a为0x为1,或者a为1x为0的位再加上x为1的位
也就是a的二进制下1的个数乘以2

 #include
using namespace std;

#define ll long long
const int MAXN=1e9;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        ll n;
        scanf("%I64d",&n);
        if(n==0)
        {
            cout<<1<<endl;
            continue;
        }
        ll ans=1;
        while(n)
        {
            if((n&1ll)==1ll)ans<<=1;
            n>>=1;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(【找规律】Codeforces Round #516 B. Equations of Mathematical Magic)