专栏文章

题解:CF2153B Bitwise Reversion

CF2153B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mingitot
此快照首次捕获于
2025/12/02 02:02
3 个月前
此快照最后确认于
2025/12/02 02:02
3 个月前
查看原文

题目传送门

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

思路

众所周知,对于与运算,当且仅当两个运算的数均为 11 时的结果才是 11
xi,yi,zix_i,y_i,z_i 分别表示 x,y,zx,y,z 的从右往左的第 ii 位。(非特殊说明,本篇题解的第 ii 位均指从右往左的第 ii 位)
分类讨论如下情况:
  • xi=0x_i=0yi=0y_i=0zi=0z_i=0
    这时只需要 a,b,ca,b,c 在二进制下的第 ii 位均为 00 即可。
  • xi=0x_i=0yi=0y_i=0zi=1z_i=1
    可以构造 ai=0a_i=0bi=1b_i=1ci=1c_i=1,满足对应的条件。
    xi=0x_i=0yi=1y_i=1zi=0z_i=0xi=1x_i=1yi=0y_i=0zi=0z_i=0 是同理的。
  • xi=0x_i=0yi=1y_i=1zi=1z_i=1
    可以发现,无论 aia_ibib_icic_i 取什么值,都无法满足这个条件。因为由 yi=1y_i=1zi=1z_i=1 可以推出 ai=1a_i=1bi=1b_i=1ci=1c_i=1。此时 xi=ai&bi=1x_i=a_i\&b_i=1,与原题条件不符。xi=1x_i=1yi=0y_i=0xi=1x_i=1xi=1x_i=1yi=1y_i=1xi=0x_i=0 也是同理。
  • xi=1x_i=1yi=1y_i=1zi=1z_i=1
    可以构造 ai=1a_i=1bi=1b_i=1ci=1c_i=1,满足对应条件。
综上所述,xix_iyiy_iziz_i 三个数中只有其中有两个是 11 时不可以构造出对应的 aia_ibib_icic_i。即对于 xi+yi+zi=2x_i+y_i+z_i=2 是无法得到对应的 aia_ibib_icic_i

代码实现

众所不一定周知,对于一个十进制数 nn,如果要取它二进制下的第 ii 位,可以用代码 (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 条评论,欢迎与作者交流。

正在加载评论...