求区间中1的个数最多的数 若有多个输出最小的

来源:互联网 发布:淘宝欧舒丹是正品吗 编辑:程序博客网 时间:2024/06/07 20:20

原题链接:

http://acm.ecnu.edu.cn/problem/3303/

分析:

数据量大考虑按位处理 

每次把 L 中的二进制其中一个0变成1,直到比R大

有多个优先输出小的,也就是二进制中0在高位的,也就是优先将低位0变1 使用ans|=ans+1;将最低位0变1


代码:

#include<bits/stdc++.h>using namespace std;#define ll unsigned long longll l,r,ans;int n;void show(){    char s[66];    itoa(ans,s,2);//将ans转换成二进制保存在s中    printf("%s\n",s);}int main(){    scanf("%d",&n);    for(int i=1;i<=n;++i){        scanf("%llu%llu",&l,&r);        ans=l;        while((ans|(ans+1))<=r){            ans|=ans+1;            //show();        }        printf("Case %d: %llu\n",i,ans);    }    return 0;}



原创粉丝点击