• 20200307(DEF)题解 by 孙晨曦


    设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
  • 相关阅读:
    bootstrap
    前端框架 angularjs
    JAva集合框架
    圣诞
    IDEA
    科目三
    Bootstrap简介及Bootstrap里的栅格系统col-md/sm/xs-x;
    C# Windows service 定时发邮件功能 (用到webService)
    <转> 数据库索引的作用和优点缺点
    小知识
  • 原文地址:https://www.cnblogs.com/QLU-ACM/p/12437277.html
Copyright © 2020-2023  润新知