51nod1496 最小异或和

题目
l e n = r − l + 1 len=r-l+1 len=rl+1,注意 k k k l e n len len要区分开
1 : a n s = 0 1:ans=0 1ans=0,条件:选 4 4 4个连续的数,末尾是 10 , 11 , 00 , 01 10,11,00,01 10,11,00,01
2 : a n s = 0 2:ans=0 2ans=0,条件:选 3 3 3个数,分别为:
0 1 1 1 1 1 1 1 1 1 1 1 1( > = l >=l >=l
1 0 1 1 1 1 1 1 1 1 1 1 1( &lt; r &lt;r <r
1 1 0 0 0 0 0 0 0 0 0 0 0( &lt; = r &lt;=r <=r
3 : a n s = 1 3:ans=1 3ans=1,条件:选 2 2 2个相邻的数,末尾是 0 , 1 0,1 0,1
4 : a n s = l 异 或 r 4:ans=l异或r 4ans=lr,条件: l 异 或 r &lt; l l异或r&lt;l lr<l l ! = r l!=r l!=r
5 : a n s = l 5:ans=l 5ans=l,无条件

#include<bits/stdc++.h>
using namespace std;
long long l,r,len;
int k,t;
int main(){
	scanf("%lld%lld%d",&l,&r,&k);
	len=r-l+1;
	if (k>=4 && (len>4 || len==4 && !(l&1))) return puts("0"),0;
	if (k>=3){
		for (;l>>t;t++);
		if ((3ll<<t-1)<=r) return puts("0"),0;
	}
	if (k>=2){
		if (len>2 || len==2 && !(l&1)) return puts("1"),0;
		if ((l^r)<l) return printf("%lld",l^r),0;
	}
	printf("%lld",l);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值