zoukankan      html  css  js  c++  java
  • 最大的位或 HDU

    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
    511
    1000000000000000000

    题意 : 给你一个区间[l,R]求这个区间的最大位或值的大小。

    题目分析 : 位或的运算时在二进制中的运算,所以我们想到要换为二进制去进行运算,但忘了,我们有运算符这个运算工具了吗?那我们来分析一下它的算法吧!

    找到他们不同点点开始位置,从这个点以后的每一位数都可以变成1,而前面的数不能变0位1,否则会超出区域。

    题目收获 : 二进制的求解方法,|,&,^三种运算符的认知。

    AC代码 :
    #include <bits/stdc++.h>
    #include <iostream>
    using namespace std;
    
    long long find_high(long long x)
    {
        int sum=0;
        while(x!=0)
        {
            x>>=1;
            sum++;
        }
        return sum;
    }
    
    int main()
    {
        int T;
        cin >> T;
        while(T--)
        {
            long long l,R,k,x;
            cin >> l >> R;
            k = l^R;
            long long num_=find_high(k);
            x = (1LL << num_)-1;//向前面把num_个1打出来,减一才是num_个1,否则是num_1+1位置为1其余为0。
            printf("%I64d
    ",R|x);
        }
        return 0;
    }
  • 相关阅读:
    lua pbc
    c保存lua函数
    c语言的lua库编写
    Gridcontrol新增行选中有关问题
    python3 练习题100例 (十五)
    python3 练习题100例 (十四)
    python3 练习题100例 (十三)
    python3 练习题100例 (十二)
    python3 练习题100例 (十一)
    python3 练习题100例 (十)
  • 原文地址:https://www.cnblogs.com/7750-13/p/7295530.html
Copyright © 2011-2022 走看看