Codeforces 276D Little Girl and Maximum XOR

时间:2023-03-09 09:09:13
Codeforces 276D Little Girl and Maximum XOR

题意:给范围l,r选两个数亦或最大是多少。

思路:找到第一个l和r二进制下不相同的位置i,然后答案就是2^(i+1)-1,因为一个取0一个取1之后,后面的位置全部选1和全部选0,就是这样:01111111...和1000000...

#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
ll read(){
ll t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
int main(){
ll l=read(),r=read(),ans=;
for (int i=;i>=;i--){
if (((l>>i)&)^((r>>i)&)){
ans=(ll)(1LL<<(i+))-;
break;
}
}
printf("%I64d\n",ans);
return ;
}