题解 | #兔子的区间密码#

兔子的区间密码

https://ac.nowcoder.com/acm/problem/20860

结论:从高位计算,第一个不相同的之后全部为11
假设ll,rr在第ii位开始不相同,ii位之前的异或之后全为00,之后的我们可以保证凑成不一样的,异或之后全部位11。这样我们的结果就是从ii开始往后全为11的二进制,将二进制转换位十进制输出即可。
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();
}
全部评论

相关推荐

Dream_coding:你是不是只投大厂了
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务