C++ “小女孩和最大异或”
我如何解决codeforces上的问题 非DP的第二种方法似乎更容易,但我无法理解它是如何工作的 有人能详细解释一下非dp方法吗 我还发现了这个我无法理解的代码实现C++ “小女孩和最大异或”,c++,bit-manipulation,xor,C++,Bit Manipulation,Xor,我如何解决codeforces上的问题 非DP的第二种方法似乎更容易,但我无法理解它是如何工作的 有人能详细解释一下非dp方法吗 我还发现了这个我无法理解的代码实现 #include <iostream> #define ll long long #define cnt_leading_zero_bits(x) __builtin_clzll(x); using namespace std; int main() { ll l, r; cin >> l
#include <iostream>
#define ll long long
#define cnt_leading_zero_bits(x) __builtin_clzll(x);
using namespace std;
int main() {
ll l, r;
cin >> l >> r;
if (l == r) {
cout << "0\n";
return 0;
}
ll cnt = cnt_leading_zero_bits(l ^ r);
ll val = 64 - cnt;
cout<< ((1LL << val) - 1) << "\n";
return 0;
}
有人来帮忙。如果你读到关于内置clzll的文章
-内置函数:int uu内置函数clzll无符号长x
返回x中前导0位的数目,从最高有效位位置开始。如果x为0,则结果未定义
从
区间[l,r]中任意两个整数的最大可能异或可由l确定⊕ r、 假设l,r是整数。该值等于pow2,p− 1,其中p是最小值,使得pow2,p大于l⊕ r
现在,关于代码
val = 64 - __builtin_clzll(l ^ r); // p
(1LL << val) - 1; // pow(2, p) - 1
请每个问题问一个问题。提到的代码不是另一个问题。问题1:有人能详细解释非dp方法吗?问题2:有人能帮助我理解此代码实现是如何工作的我无法理解此代码是如何解决上述问题的。