1 cf div951
位运算(异或)
https://www.luogu.com.cn/problem/CF1979B
思路
[l,r]=[l1,r1] ^ (x ^ y)也就是是找x^y异或一个区间后仍然能够连续,对于x ^ y可以写成xxxx1000,xxxx设为A,为一段01序列,那么就是区间[0,x ^ y-A-1]能够保证连续。
因为第一个1右侧都是0,都不进位,1000+0000,1000+0001,1000+0010...
左侧都是0000和xxxx不进位相加也不变,不进位保证连续。但是如果取到1000,1000+1000就会进位,我们不知道xxxx是多少,是xxx1,那么就不连续了,例如1 1000,0 1000相加变成 10 000
代码
#include <bits/stdc++.h>
using namespace std;
int lowbit(int x) {return (x & -x);} //定义lowbit函数
int t, x, y;
int main()
{
cin >> t;
while(t--)
{
scanf("%d%d", &x, &y);
int ans = lowbit(x ^ y); //使用lowbit函数计算
cout << ans << endl;
}
return 0;
}