题解:SP25844 MAXXOR - Find the max XOR value
我们先考虑如果两个数的二进制位数不同的情况,显然这种情况下,我们可以取与
那么如果位数相同,我们可以不断分别去掉
所以我们发现,实际上只要先取 __builtin_clz 的函数可以计算前导零的数目并且速度非常快(这是对于洛谷评测机来说的,因为可以通过 LZCNT 指令计算,但是部分 OJ 比如 BZOJ 显然不支持,所以只能回退到 BSR 指令实现)。(造了一个
那么简单了,上代码。
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
unsigned long long L, R;
cin >> L >> R;
unsigned long long xor_val = L ^ R;
if (xor_val == 0) {
cout << "0\n";
return 0;
}
int bit_length = 64 - __builtin_clzll(xor_val);
unsigned long long result = (1ULL << bit_length) - 1;
cout << result << '\n';
return 0;
}