HDU 5969 最大的位或 (思维,贪心)
HDU 5969 最大的位或
题目大意
B君和G君聊天的时候想到了如下的问题。
给定自然数\(l\)和\(r\) ,选取\(2\)个整数\(x,y\)满足\(l <= x <= y <= r\),使得\(x|y\)最大。
\(0 <= l <= r <= 10181018\)
solution
你看那数据范围,是不是像极了\(TLE\)
又是玄学贪心
异或最大,那么就尽可能让每一位上都是1,按照这个策略贪心即可,注意long long
#include<cstdio>
using namespace std;
typedef long long ll;
int main(){
ll aa,bb,t;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&aa,&bb);
ll now=0;
while((aa|((long long)1<<now))<bb) aa|=((long long)1<<now),now++;
printf("%lld\n",aa|bb);
}
return 0;
}
风吹过,我来过~