专栏文章
题解:CF2153B Bitwise Reversion
CF2153B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mingitot
- 此快照首次捕获于
- 2025/12/02 02:02 3 个月前
- 此快照最后确认于
- 2025/12/02 02:02 3 个月前
题目传送门
由于题面已经非常简洁了,故不在此赘述。
思路
众所周知,对于与运算,当且仅当两个运算的数均为 时的结果才是 。
设 分别表示 的从右往左的第 位。(非特殊说明,本篇题解的第 位均指从右往左的第 位)
分类讨论如下情况:
-
,,这时只需要 在二进制下的第 位均为 即可。
-
,,可以构造 ,,,满足对应的条件。,, 和 ,, 是同理的。
-
,,可以发现,无论 ,, 取什么值,都无法满足这个条件。因为由 , 可以推出 ,,。此时 ,与原题条件不符。,, 和 ,, 也是同理。
-
,,可以构造 ,,,满足对应条件。
综上所述,,, 三个数中只有其中有两个是 时不可以构造出对应的 ,,。即对于 是无法得到对应的 ,,。
代码实现
众所不一定周知,对于一个十进制数 ,如果要取它二进制下的第 位,可以用代码
(n>>i)&1 实现。有了这个点,代码就十分好实现了。代码
CPP#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...