题解:CF2153B Bitwise Reversion
Part 1 题意
现在,也就是说给了我们三个数
我们需要判断是否存在
Part 2 思路
我们考虑一下按位与运算的性质,当且仅当
通过上面举出的三个例子,我们可以发现规律:\
只要
Part 3 代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll x, y, z;
void work() {
cin >> x >> y >> z;
for (ll i = 0; i <= 31; i ++) {
ll a = ((x >> i) & 1), b = ((y >> i) & 1), c = ((z >> i) & 1);
// cout << "i = " << i << " a = " << a << " b = " << b << " c = " << c << " \n";
if (a == 0 && b == 1 && c == 1) {
cout << "NO\n";
return ;
}
if (a == 1 && b == 1 && c == 0) {
cout << "NO\n";
return ;
}
if (a == 1 && b == 0 && c == 1) {
cout << "NO\n";
return ;
}
}
cout << "YES\n";
}
int main() {
int _; cin >> _;
while (_ --) work();
return 0;
}
这里解释一下代码,代码中的
总复杂度应该是