D. Little Girl and Maximum XOR(贪心)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D. Little Girl and Maximum XOR(贪心)相关的知识,希望对你有一定的参考价值。

D. Little Girl and Maximum XOR(贪心)

贪心,从最高位开始,显然相同的位 是没有贡献的,因为 [ L , R ] [L,R] [L,R]范围内这些数对应的这些位都相同,我们找到第一个不相同的位 k k k

显然 R R R的第 k k k位是1, L L L的第 k k k位是0.

那么较大的那个数,我们可以取 10000000 10000000 10000000,且该数肯定 ≤ R \\le R R,因为后面都为0.

较小的数取 01111111111 01111111111 01111111111,该数肯定 ≥ L \\ge L L,因为后面都是1.

答案就是: 2 k + 1 − 1 2^{k+1}-1 2k+11

注意特判 L = R L=R L=R的时候,答案为0.

关于找两个数从高到低第一个不同的位置可以用 ( L ⊕ R ) (L\\oplus R) (LR)

这样最高位的1表示的位置就是 k k k

然后贡献就是: 2 [ 64 − _ _ b u i l t i n _ c l z l l ( L ⊕ R ) ] − 1 \\large 2^{[64-\\_\\_builtin\\_clzll(L\\oplus R)]}-1 2[64__builtin_clzll(LR)]1

c l z clz clz函数是计算前导0的个数, 64 − c l z ( L ⊕ R ) 64-clz(L\\oplus R) 64clz(LR) 就是 k + 1 k+1 k+1

时间复杂度: l o g ( R ) log(R) log(R)

// Problem: D. Little Girl and Maximum XOR
// Contest: Codeforces - Codeforces Round #169 (Div. 2)
// URL: https://codeforces.ml/contest/276/problem/D
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// Date: 2021-08-11 09:26:23
// --------by Herio--------

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; 
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define ios ios::sync_with_stdio(false),cin.tie(0) 
void Print(int *a,int n){
	for(int i=1;i<n;i++)
		printf("%d ",a[i]);
	printf("%d\\n",a[n]); 
}
int main(){
	ll l,r;scanf("%lld%lld",&l,&r);
	printf("%lld\\n",l==r?0:(1LL<<(64-__builtin_clzll(l^r)))-1);
	return 0;
}

以上是关于D. Little Girl and Maximum XOR(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

Little Girl and Maximum Sum CodeForces - 276C

CF276E Little Girl and Problem on Trees 题解

Codeforces Round #169 (Div. 2)C. Little Girl and Maximum Sum

C. Little Girl and Maximum Sum差分 / 贪心

B. Little Girl and Game1300 / 回文字符串 博弈论

D. Little Artem and Dance