题解 CF1421A 【XORwice】
题意
给定数字 \(a\), \(b\),求\((a\bigoplus x) + (b \bigoplus x)\)的最小值,其中x为任意整数
思路
把\(a\),\(b\)进行二进制分解,考虑 \(a\),\(b\) 的每一位,若都为0,则\(x\)这一位为0时最佳;若一个为0,另一个为1,则\(x\)这一位为1或0对答案都没有影响;若都为1,则\(x\)这一位为1最佳
发现什么没有,我们这样的话实际上就是让\(a\bigoplus b\)了,也即\(\min(a\bigoplus x + b \bigoplus x)= a\bigoplus b\)
于是问题就这样解决了
题外话
这是我打的第一场 cf 呢,虽然是div2,充分感受到 cf 偏向思维的风格,总之挺妙的
代码
#include<bits/stdc++.h>
using namespace std;
int T,a,b;
int main(){
scanf("%d",&T);
for(int i=1;i<=T;i++){
scanf("%d%d",&a,&b);
printf("%d\n",a^b);
}
return 0;
}

浙公网安备 33010602011771号