首页 > 其他 > 详细

20200307(DEF)题解 by 孙晨曦

时间:2020-03-07 22:14:00      阅读:59      评论:0      收藏:0      [点我收藏+]
设ans为结果
看L和R的二进制,设L最高位的1对应的值位A,R最高位的1对应的值位B(比如5的二进制是101,最高位的1对应的是2^2=4)
若A==B,ans这一位上的异或值必然是0,所以让L和R都减去最高位,重新找最高位的1。
若A!=B,那么B肯定大于A,也就是说R的二进制比L的二进制长,然后,可以这样想:
首先ans在B这一位上肯定应该是1,因为要使结果最大。
因为左端点二进制的长度是小于右端点的,
所以可以让第一个数除了B这一位是0,后面的位都是1(这个数一定能取到);让第二个数除了B这一位是1,后面的位都是0(这个数也一定能取到),即让第一个数是B-1,第二个数是B
此时B^(B-1)就是最大的结果
例如,假设L是101(二进制),R是10010(二进制),那么B是10000(二进制),让第一个数为1111,第二个数为10000,结果就是11111,肯定就最大了。
 
 这是思路,写法可以直接从二进制高位到低位找L和R第一个不同的位对应的值,然后直接输出这个值*2-1

20200307(DEF)题解 by 孙晨曦

原文:https://www.cnblogs.com/QLU-ACM/p/12437277.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!