题解:CF2020C Bitwise Balancing
题目传送门
洛谷 CF
题目大意
给你三个非负整数
请找出一个非负整数
如果存在
解法
一道二进制题。
可以对每一位进行考虑。把
具体细节请参见代码。
代码
CF 提交记录\ (代码块展示 solve 函数部分,ll 为 long long。)
void solve(){
ll b,c,d;
cin>>b>>c>>d;
ll a=0;
bool fail=0;//记录是否未找到
for(int bit=0;bit<60;bit++){//循环每一位
int bb=(b>>bit)&1;//取出b从右往左第bit+1位
int cc=(c>>bit)&1;//同上
int dd=(d>>bit)&1;//同上
vector<int> v;
if((0|bb)-(0&cc)==dd)v.push_back(0);
if((1|bb)-(1&cc)==dd)v.push_back(1);
if(v.empty()){
fail=1;
break;
}//判断是否成立
a|=ll(v[0])<<bit;//记得类型转换,否则可能会溢出
}
cout<<(fail?-1:a)<<endl;//输出答案
}