zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    day02_05.除数与被除数
    day02_04.算算多少人
    day02_03.五个数字一行输出
    day02_02.能被3整除的个位数为6的数
    day02_01.能被3整除的数
    day05_10 作业
    day05_09 列表内置方法
    day05_08 列表讲解、切片、内置方法
    day05_07 标志位讲解
    day05_06 continue语句、while循环
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8207002.html
Copyright © 2011-2022 走看看