题目传送门
题目给你A,B,求使 (A xor C) & (B xor C)最小时C的值
C可能有多个值输出最小的C
思路:
记ansi=(Ai⊕Ci)(Bi⊕Ci),⊕为异或运算,x⊕y=xy’+yx’,xx′=0,x*x=x.
ansi=(AiCi′ +Ai′ Ci)(BiCi′ + Bi′ Ci )=AiCi′ BiCi′ +AiCi′ Bi′ Ci+Ai′ CiBiCi′ +Ai′ CiBi′ Ci
化简后ansi==AiBiCi′ +Ai′ Bi′ Ci;
当Ai=1且Bi=1时,要使ansi最小,C要取1
其他时候C取0即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll a,b,c;
int main()
{
cin>>t;
ll p=1ll<<31;
while(t--)
{
c=0;
cin>>a>>b;
for(int i=31;i>=0;i--)
{
c<<=1;
if((a&p)&&(b&p))c++;
a<<=1;
b<<=1;
}
if(!c)c=1;
cout<<c<<endl;
}
return 0;
}