专栏文章
题解:SP25844 MAXXOR - Find the max XOR value
SP25844题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio0x3ic
- 此快照首次捕获于
- 2025/12/02 11:33 3 个月前
- 此快照最后确认于
- 2025/12/02 11:33 3 个月前
我们先考虑如果两个数的二进制位数不同的情况,显然这种情况下,我们可以取与 二进制位数相同的最小值 然后取 即为答案,这个非常容易理解吧。
那么如果位数相同,我们可以不断分别去掉 和 的前导 (因为这些统一的 其实与统一的 就没什么区别),直到有一位不同,然后可以参考上面的方法处理。
所以我们发现,实际上只要先取 ,然后求 即可。我们注意到 GNU C++ 提供了一个叫做
__builtin_clz 的函数可以计算前导零的数目并且速度非常快(这是对于洛谷评测机来说的,因为可以通过 LZCNT 指令计算,但是部分 OJ 比如 BZOJ 显然不支持,所以只能回退到 BSR 指令实现)。(造了一个 这个词语,应该不难理解。)那么简单了,上代码。
CPP#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...