C. Bits
题意:在一个区间[l,r]内找出二进制下"1"最多的数,如果有多解,输出最小的数。
思路:贪心。从l开始,从低位到高位,逐位或1,如果或结果不比r大,就或上去。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
int main(){
int t;
cin>>t;
while(t--){
ll l,r;
cin>>l>>r;
ll cur=l;
ll tmp=1;
while(tmp<r){
if((cur|tmp)<=r)cur|=tmp;
tmp<<=1;
}
cout<<cur<<endl;
}
return 0;
}
本文介绍了一种利用贪心算法解决在指定区间内找到二进制下1出现次数最多的整数的方法。通过从左往右逐位或上1,若或结果不超过右边界,则继续进行或操作,最终得到该区间内1出现次数最多的数。
1616

被折叠的 条评论
为什么被折叠?



