码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #276 (Div. 1)Bits

时间:2014-11-06 19:27:57      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:io   os   for   sp   div   on   bs   amp   ef   

题意就是给你一个区间[l,r],求这个区间中化成二进制形式1最多的数,如果有多解输出最小值.

贪心即可,把l化为二进制,把最右边不是0的变成1.

例如 19 30

10011 11110

第一步 10011-->10111

第二步 10111-->11111大于30退出循环 答案即是10111

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){
    int t;
    for(scanf("%d",&t);t;t--){
        unsigned long long lef,rig;
        cin>>lef>>rig;
        for (int i=0;i<64;i++){
            if (((1LL<<i)&lef)==0){
                if (((1LL<<i)|lef)<=rig){
                    lef |= (1LL<<i);
                }else{
                    break;
                }
            }
        }
        cout<<lef<<endl;
    }
    return 0;
}

 

Codeforces Round #276 (Div. 1)Bits

标签:io   os   for   sp   div   on   bs   amp   ef   

原文地址:http://www.cnblogs.com/nhywieza/p/4079314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!