兔子的区间密码 (牛客)位运算

链接: https://ac.nowcoder.com/acm/contest/543/C
题意
给定一个区间,这个区间中任意选择两个(可以相同的)整数后异或的最大值。
思路: (结论题)
我们可以 L^R,这个区间异或得到最大的数二进制位最多有前者异或得到的数的二进制位数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		ll l,r;
		scanf("%lld%lld",&l,&r);
		ll bit=l^r;
		ll ans=0;
		while(bit)
		{
			ans=ans*2+1;
			bit>>=1;
		}
		cout<<ans<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42819598/article/details/88809226