CodeForces-Vlad and a Pair of Numbers
题目

题意简述
找两个整数 \(a\) 和 \(b\),满足以下规则。
-
\(a + b = x \times 2\);
-
\(a \operatorname{xor} b = x\),其中 \(\operatorname{xor}\) 指异或。
做题思路
不妨在草稿纸上画画样例。

对于最终某位异或是一的地方,我们明白两个数只能一方此位是一,那么对于零就不一定了,然后我们可以思考,既然最终异或要等于 \(36\),那么不妨让其中一个数先为 \(36\),然后再后续调整,此时剩余可支配的数值为 \(36\),
这里要记住,我们只能在 \(xor\) 那一栏数位为 \(0\) 的上面进行分配,每分配一个 \(1\) 的时候,两个数位都要有 \(1\),否则就别分配,最终分配完了剩余值,如果对于另一个数(没有给初始 \(36\) 的那个数字)不会和 \(x\) 进行数位冲突就是 \(&\) 为 \(1\),那就是正确的。
int shenyu=x/2;
int w=shenyu&x;
if(w==0)
{
cout<<x+shenyu<<" "<<shenyu<<endl;
return ;
}
else{
cout<<-1<<endl;
return ;
}

浙公网安备 33010602011771号