HDU6702 ^&^

题目传送门
题目给你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;
}

猜你喜欢

转载自blog.csdn.net/weixin_46001550/article/details/108550821
hdu