NC20860 兔子的区间密码

简介: 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;
}


相关文章
|
数据安全/隐私保护 Python
【每周一坑】信息加密​ +【解答】正整数分解质因数
如果之前已经有质因数,最后剩下的 i 就是最后一个质因数;如果没有,说明原数就是质数
|
6月前
|
存储
nowcoder NC236题 最大差值
【1月更文挑战第2天】
46 0
|
6月前
nowcoder NC30 缺失的第一个正整数
题目链接:  https://www.nowcoder.com/share/jump/819478881694767416272
42 0
|
6月前
|
算法 C语言
【牛客-算法】NC56 回文数字
🚩 前言 🔥 该专栏作为算法题笔记,记录算法的思路、遇到的问题,以及能跑的代码,持续更新中! 🔥 推荐一款面试、刷题神器牛客网:👉开始刷题学习👈
56 0
|
6月前
|
存储 算法 Java
【牛客-算法】NC57 反转数字
题目描述 原题:NC57 反转数字 描述 给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果 1.只反转数字部分,符号位部分不反转
48 0
|
容器
华为机试HJ60:查找组成一个偶数最接近的两个素数
华为机试HJ60:查找组成一个偶数最接近的两个素数
华为机试HJ58:输入n个整数,输出其中最小的k个
华为机试HJ58:输入n个整数,输出其中最小的k个
|
数据安全/隐私保护
华为机试HJ32:密码截取
华为机试HJ32:密码截取
华为机试HJ37:统计每个月兔子的总数(斐波那契数列)
华为机试HJ37:统计每个月兔子的总数(斐波那契数列)