题解 | #兔子的区间密码#
兔子的区间密码
https://ac.nowcoder.com/acm/problem/20860
结论:从高位计算,第一个不相同的之后全部为
假设,在第位开始不相同,位之前的异或之后全为,之后的我们可以保证凑成不一样的,异或之后全部位。这样我们的结果就是从开始往后全为的二进制,将二进制转换位十进制输出即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
void dilingtian()
{
long long l, r;
cin >> l >> r;
int i;
for (i = 63; i >= 0; i--)
if ((l >> i) != (r >> i))
break;
cout << i << endl;
cout << (1ll << i + 1) - 1 << endl;
}
int main(void)
{
int t;
cin >> t;
while (t--)
dilingtian();
}