• CF1064B 【Equations of Mathematical Magic】


    传送门

      题目意思就是给定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;
    }
    
  • 相关阅读:
    UVA
    UVA
    UVA
    UVA
    POJ
    Yahoo Programming Contest 2019 自闭记
    Codeforces Global Round 1 自闭记
    CodeCraft-19 and Codeforces Round #537 Div. 2
    BZOJ4912 SDOI2017天才黑客(最短路+虚树)
    BZOJ2877 NOI2012魔幻棋盘(二维线段树)
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754842.html
Copyright © 2020-2023  润新知