• Codeforces Round #276 (Div. 1) A. Bits


    http://codeforces.com/contest/484/problem/A

    题意:

    询问[a,b]中二进制位1最多且最小的数

    贪心,假设开始每一位都是1

    从高位i开始枚举,

    如果当前数>b,且减去1<<i后仍>=a,就减1<<i

    当当前数在[a,b]之间时,输出

    因为从高位开始减,所以保证当前数是最小的

    #include<cstdio>
    #include<iostream>
    
    using namespace std;
    
    typedef long long LL;
    
    LL bit[61]; 
    
    void read(LL &x)
    {
        x=0; char c=getchar();
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) { x=x*10+c-'0'; c=getchar();  }
    } 
    
    int main()
    {
        bit[0]=1;
        for(int i=1;i<=60;++i) bit[i]=bit[i-1]<<1; 
        int n;
        scanf("%d",&n);
        LL a,b;
        LL ans;
        while(n--)
        {
            read(a); read(b);
            ans=(1LL<<61)-1;
            for(int i=60;i>=0;--i)
            {
                if(ans>b && ans-bit[i]>=a) ans-=bit[i];
                if(ans>=a && ans<=b) break;
            }
            cout<<ans<<'
    ';
        }
    }
    A. Bits
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Let's denote as  the number of bits set ('1' bits) in the binary representation of the non-negative integer x.

    You are given multiple queries consisting of pairs of integers l and r. For each query, find the x, such that l ≤ x ≤ r, and is maximum possible. If there are multiple such numbers find the smallest of them.

    Input

    The first line contains integer n — the number of queries (1 ≤ n ≤ 10000).

    Each of the following n lines contain two integers li, ri — the arguments for the corresponding query (0 ≤ li ≤ ri ≤ 1018).

    Output

    For each query print the answer in a separate line.

    Examples
    input
    3
    1 2
    2 4
    1 10
    output
    1
    3
    7
    Note

    The binary representations of numbers from 1 to 10 are listed below:

    110 = 12

    210 = 102

    310 = 112

    410 = 1002

    510 = 1012

    610 = 1102

    710 = 1112

    810 = 10002

    910 = 10012

    1010 = 10102

  • 相关阅读:
    凡X网登录js代码逆向分析
    vim 从嫌弃到依赖(6)——插入模式
    vim 从嫌弃到依赖(3)——vim 普通模式
    vim 从嫌弃到依赖(7)——可视模式
    vim 从嫌弃到依赖(2)——vim 模式
    vim 从嫌弃到依赖(5)——普通模式的一些操作
    vim 从嫌弃到依赖(4)—— .命令
    Java ScriptEngineManager类使用
    redis的 分布式锁 golang/erlang 简单实现
    1
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8207002.html
Copyright © 2020-2023  润新知