题目

B君和G君聊天的时候想到了如下的问题。

给定自然数l和r ,选取2个整数\(x,y\)满足\(l <= x <= y <= r\),使得\(x|y\)最大。

其中\(|\)表示按位或,即\(C、 C++、 Java\)中的\(|\)运算。

输入格式

包含至多\(10001\)组测试数据。

第一行有一个正整数,表示数据的组数。

接下来每一行表示一组数据,包含两个整数\(l,r\)。

保证 \(0 <= l <= r <= 1018\)。

输出格式

对于每组数据输出一行,表示最大的位或。

输入样例

5
1 10
0 1
1023 1024
233 322
1000000000000000000 1000000000000000000

输出样例

15
1
2047
511
1000000000000000000

题解

输入两个数字\(l,r\)

二进制位低位对齐, 从高位向低位遍历.

  1. 如果两个数字第\(i\)位不相同, 那答案从这一位开始, 到最后都是\(1\), 然后停止遍历.

因为这步(不相同)会停止遍历, 所以前面每位都相同, 在保持前面不变的情况下, 可以直接忽略前面, 那么, 由于不相同, 必定有一个\(1\), 有一个\(0\).

因为前面都相等, 所以必定是大数这一位为\(1\), 那就是这样的情况:

1xxxxx (大数)
0xxxxx (小数)

如果最终做运算的一个数可以取大数到小数之间的任何数字, 自然也包括011111, 而011111|1xxxxx 答案自然是111111, 后面无需再计算.

  1. 如果两个数字的第\(i\)位相同, 答案这一位也相同.

由于遇到第一个不同的数字循环就会停止, 所以前面所有位都相同, 也就没有增减的余地, 这一位加1必定大于最大值, 减1必定小于最小值, 所以不变即可

代码

#include <cstdio>
int main() {
int t;
scanf("%d", &t);
while (t--) {
long long a, b, ans = 0;
scanf("%lld%lld", &a, &b);
for (long long i = 60; i >= 0; i--) {
if(!((1&(a>>i))^(1&(b>>i)))) ans^=(a&(1ll<<i));
else{
ans^=(1ll<<(i+1ll))-1ll;
break;
}
}
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. HuffmanTree的浅析和在C#中的算法实现
  2. Java Collection
  3. Java 内存管理
  4. KMP匹配算法
  5. Entity Framework 乐观并发控制
  6. ORACLE 单实例完全卸载数据库
  7. 【转】Intel HEX介绍
  8. [WinForm]为TextBox设置水印文字
  9. Windows10中的IIS10安装php manager和IIS URL Rewrite 2.0组件的方法
  10. 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置
  11. XtraReport交叉表自适应行高及最佳列宽
  12. weblogic启动报错之Unrecognized option: -jrockit
  13. 联系我们_你我想法_【有男度】UNANDU 100%进口 全球设计师品牌精汇 男装_男装搭配_时尚男装_品牌男装_男装搭配技巧_男装网站
  14. index seek与index scan
  15. POJ 2318 TOYS 叉积
  16. Nginx配置二级目录/路径 映射不同的反向代理和规避IP+端口访问
  17. RedisCache 缓存
  18. Vue.set() this.$set()引发的视图更新思考
  19. Unity 如何检测鼠标双击事件
  20. MD5加密文件

热门文章

  1. 大话计算机网络一 聊聊UDP
  2. 是时候拥抱.NET CORE了
  3. netty实现消息中心(一)思路整理
  4. [每日一题2020.06.16] leetcode双周赛T3 5423 找两个和为目标值且不重叠的子数组 DP, 前缀和
  5. ZWave 中的消息队列机制
  6. Python SimpleHTTPServer (python3 -m http.server 6789)
  7. demo的自动化测试框架设计
  8. 10、一个action中处理多个方法的调用第一种方法动态调用
  9. Springboot 集成 ElasticSearch 踩坑
  10. 查看日志文件常用命令:tail,cat,tac,head,echo