E-或与异或_牛客小白月赛48 (nowcoder.com)
题意:
思路:
考虑爆搜
注意重复状态的剪枝
Code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
map<pair<int,int>,int> mp;
int a,b,tar,ok=0;
void dfs(int x,int y){
if(x>y) swap(x,y);
if(mp[{x,y}]) return;
mp[{x,y}]=1;
if(x==tar||y==tar){
ok=1;
return;
}
dfs(x,x&y);
dfs(x,x|y);
dfs(x,x^y);
dfs(x&y,y);
dfs(x|y,y);
dfs(x^y,y);
}
void init(){
mp.clear();
ok=0;
}
void solve(){
init();
scanf("%lld%lld%lld",&a,&b,&tar);
if(a>b) swap(a,b);
dfs(a,b);
if(ok) puts("YES");
else puts("NO");
}
signed main(){
int T;
scanf("%lld",&T);
while(T--) solve();
return 0;
}