Codeforces 169 D Little Girl and Maximum XOR

很庆幸紫了以后有一场div 2 only的比赛。。让我能从C D开始练手,

目测CD都比较水啊,过的人好多啊。。不知B是不是大坑。。

 

手残无极限,吐槽下C题sort时候写错数组范围了吧。。。

昂。。D:

给定l,r,找到a,b使得l<=a,b<=r并满足a^b最大,

怎么想也知道要凑1111111了。。样例给的好明显。

想了各种方案,很快想到了一种,

设a>=b,找到第一位l与r不同的二进制位i,

那么必定是ai=1,bi=0.

那么a=1000000...

       b=0111111...

这样必定满足a<=r && b>=l && a>=b && a^b=max

 

然后就写吧。。写完发现样例都过不去。。。

调试了好久,完全找不到错误,不得已输出l和r的每一位,

发现在35 36位和3 4位重了,想到是int和long long 的问题

那么问题出在哪呢。。。想了20多分钟,

终于发现:1<<i是不对的,因为1是int的。。。

所以,代码

#include<stdio.h>
int main(){
	long long x,y,as=0;
	int i;
	scanf("%I64d%I64d",&x,&y);
	for(i=63;i>=0;i--){
		if((x&(1LL<<i))^(y&(1LL<<i)))
			break;
	}
	for(;i>=0;i--)
		as|=(1LL<<i);
	printf("%I64d\n",as);
	return 0;
}

 

 

 

你可能感兴趣的:(Codeforces 169 D Little Girl and Maximum XOR)