题解:CF2153B Bitwise Reversion

· · 题解

题目传送门

题目:https://www.luogu.com.cn/problem/CF2153B

由于题面已经非常简洁了,故不在此赘述。

思路

众所周知,对于与运算,当且仅当两个运算的数均为 1 时的结果才是 1

x_i,y_i,z_i 分别表示 x,y,z 的从右往左的第 i 位。(非特殊说明,本篇题解的第 i 位均指从右往左的第 i 位)

分类讨论如下情况:

综上所述,x_iy_iz_i 三个数中只有其中有两个是 1 时不可以构造出对应的 a_ib_ic_i。即对于 x_i+y_i+z_i=2 是无法得到对应的 a_ib_ic_i

代码实现

众所不一定周知,对于一个十进制数 n,如果要取它二进制下的第 i 位,可以用代码 (n>>i)&1 实现。有了这个点,代码就十分好实现了。

代码

#include<bits/stdc++.h>
# define chenxuhang_play return
# define code 0
using namespace std;
int main(){
    long long t,x,y,z;
    cin>>t;
    while(t--)
    {
        cin>>x>>y>>z;
        bool b=true;
        for(int i=0;i<=31;i++)
        {
            if(((x>>i)&1)+((y>>i)&1)+((z>>i)&1)==2)
            {
                cout<<"NO\n";
                b=false;
                break;
            }
        } 
        if(b)cout<<"YES\n";
    }
    chenxuhang_play code;
}