D. Little Girl and Maximum XOR(贪心)

Input

1 2

Output

3

Input

8 16

Output

31

Input

1 1

Output

0题意: 在区间[l,r]中找出两个数a,b(a <= b),使得a ^ b达到最大;题解:(1) 首先有这样一个现象,当2 ^ n <= r的n达到最大时,且2 ^ n – 1 >= l ,答案是(2 ^ n + 2 ^ n – 1),即其二进制数全部为一,且为异或的最大值,没法再大,因为2 ^ n已达到极限; 另一种情况是当2^n < l 时就贪心处理. 从高位往低位枚举,对于当前为如果二进制数为1,比l还小的话,则置为1,如果当前值大于r的话,则置为0; 否则则后面的位符合(1)说法;AC代码:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <bitset>#include <algorithm>#include <vector>#define lson l,mid,u << 1#define rson mid + 1,r,u << 1 | 1#define ls u << 1#define rs u << 1 | 1#define exp 1e-8using namespace std;typedef long long ll;int main() {ll l,r;while(cin>>l>>r) {ll maxn = 0;if(l == r) {puts("0");continue;}ll i = 0,ans;while(true) {ans = 1LL << i;if(ans > r) {ans = 1LL << (i – 1);break;}i++;}i–;if(ans >= l && ans – 1 >= l) {cout<<ans + ans – 1<<endl;} else {while(true) {ll res = ans + (1LL << (i – 1));if(res <= l) ans += 1LL << (i – 1);else if(res <= r){ans = 0;for(ll j = 0; j < i; j++) {ans += 1LL << j;}break;}i–;}cout<<ans<<endl;}}return 0;}

,在前进的路上,主动搬开别人脚下的绊脚石,有时往往也是为自己铺路。

D. Little Girl and Maximum XOR(贪心)

相关文章:

你感兴趣的文章:

标签云: