• J


    B君和G君聊天的时候想到了如下的问题。 
    给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大。 
    其中|表示按位或,即C、 C++、 Java中的|运算。

    Input包含至多10001组测试数据。 
    第一行有一个正整数,表示数据的组数。 
    接下来每一行表示一组数据,包含两个整数l,r。 
    保证 0 <= l <= r <= 10181018。Output对于每组数据输出一行,表示最大的位或。Sample Input

    5
    1 10
    0 1
    1023 1024
    233 322
    1000000000000000000 1000000000000000000

    Sample Output

    15
    1
    2047
     1 #include <iostream>
     2 using namespace std;
     3 #include<string.h>
     4 #include<set>
     5 #include<stdio.h>
     6 #include<math.h>
     7 #include<queue>
     8 #include<map>
     9 #include<algorithm>
    10 #include<cstdio>
    11 #include<cmath>
    12 #include<cstring>
    13 #include <cstdio>
    14 #include <cstdlib>
    15 #include<cstring>
    16 unsigned long long n,m;
    17 int a[2000],b[2000];
    18 int achang,bchang;
    19 int meishaomvbianshen1( unsigned long long q)
    20 {
    21     int i;
    22     for(i=0;q!=0;i++)
    23     {
    24         a[i]=q%2;
    25         q/=2;
    26     }
    27     return i;
    28 }
    29 int meishaomvbianshen2( unsigned long long q)
    30 {
    31     int i;
    32     for(i=0;q!=0;i++)
    33     {
    34         b[i]=q%2;
    35         q/=2;
    36     }
    37     return i;
    38 }
    39 int main()
    40 {
    41     int i;
    42     int t;
    43     cin>>t;
    44     while(t--)
    45     {
    46         cin>>n>>m;
    47         memset(a,0,sizeof(a));
    48         memset(b,0,sizeof(b));
    49         achang=meishaomvbianshen1(n);
    50         bchang=meishaomvbianshen2(m);
    51         if(achang<bchang)
    52         {
    53             unsigned long long sum=0;
    54              unsigned long long add=1;
    55             for(i=0;i<bchang;i++)
    56             {
    57                 sum+=add;
    58                 add*=2;
    59             }
    60             cout<<sum<<endl;
    61             continue;
    62         }
    63         else if(achang==bchang)
    64         {
    65             if(n==m)
    66             {
    67                 cout<<n<<endl;
    68                 continue;
    69             }
    70             int flag=0;
    71             for(i=achang-1;i>=0;i--)
    72             {
    73                 if(flag)
    74                     a[i]=1;
    75                 else if(a[i]!=b[i])
    76                 {
    77                     a[i]=1;
    78                     flag=1;
    79                 }
    80             }
    81             unsigned long long sum=0;
    82             unsigned long long add=1;
    83             for(i=0;i<achang;i++)
    84             {
    85                 sum+=a[i]*add;
    86                 add*=2;
    87             }
    88             cout<<sum<<endl;
    89         }
    90     }
    91     return 0;
    92 }
    View Code
    511
    1000000000000000000
    不多BB 代码简单易懂 还略显风骚
  • 相关阅读:
    python学习笔记3:基础(元组、字符串、列表、字典)
    python学习笔记2:基础(邮件发送)
    pycharm版本控制
    Pycharm版本控制之本地Git用法
    GitHub使用
    qtp简单说明
    查询Activity方便一点的方法
    appium基础框架
    loadrunner基本流程
    python下的unittest框架
  • 原文地址:https://www.cnblogs.com/dulute/p/7272982.html
Copyright © 2020-2023  润新知