NC20860 兔子的区间密码
Posted cq.tiancx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NC20860 兔子的区间密码相关的知识,希望对你有一定的参考价值。
题目: NC20860兔子的区间密码 ,哈哈,我们今天来看一道稍微复杂一点的题嘛,这是选自codeforce上的一道题,好了,我们一起来看看题意吧:
题目描述是复制的,可能有部分显示不对,我就把题目链接放下面!
题目链接: NC20860兔子的区间密码
题目描述
有一只可爱的兔子被困在了密室了,密室里有两个数字,还有一行字: 只有解开密码,才能够出去。 可爱的兔子摸索了好久,发现密室里的两个数字是表示的是一个区间[L,R] 而密码是这个区间中任意选择两个(可以相同的)整数后异或的最大值。 比如给了区间[2,5] 那么就有2 3 4 5这些数,其中 2 xor 5=7最大 所以密码就是7。 兔子立马解开了密室的门,发现门外还是一个门,而且数字越来越大,兔子没有办法了,所以来求助你。 提示:异或指在二进制下一位位比较,相同则 0 不同则 1输入描述
第一行一个数 T,表示数据组数。
接下来 T 行,每行两个数 L,R, 表示区间[L,R]。
输出描述
输出共T行每行一个整数,表示[L,R]的密码。
示例1
输入
5
1 10
2 3
3 4
5 5
2 5
输出
15
1
7
0
7
备注:
思路
:
根据题意,我们可以想到,若结果要最大,那么就需要两个数的二进制形式0与1互相对应的情况越多,我们只需要考虑l,r这两个数,直接从高位开始看,若不一样,则从当前开始,后面的全为1,最终得出答案,还有什么不理解的地方就看代码吧,有注释的!
我们来看看成功AC的代码吧:
#include<bits/stdc++.h>
using namespace std;
int n;
typedef long long ll;
int main()
ios::sync_with_stdio(false);
cin>>n;
while(n--)
ll l,r; cin>>l>>r;
ll t=l^r;//这里直接把二进制前面相同的去掉了,我们只需要把t的二进制全部改为1,就是答案
ll ans=0;
while(t)
ans=ans*2+1;
t>>=1;
cout<<ans<<"\\n";
return 0;
谢谢你的阅读
,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!
以上是关于NC20860 兔子的区间密码的主要内容,如果未能解决你的问题,请参考以下文章