题目
思路
首先考虑求
[
1
,
x
]
[1,x]
[1,x] 的异或。
观察发现一个性质
2
n
⊕
(
2
n
+
1
)
=
1
2n\oplus (2n+1)=1
2n⊕(2n+1)=1
然后那么对于这段区间我们分类讨论即可。
∵
x
⊕
x
=
0
∵x\oplus x=0
∵x⊕x=0
∴
a
n
s
=
[
1
,
b
]
⊕
[
1
,
a
−
1
]
∴ans=[1,b]\oplus[1,a-1]
∴ans=[1,b]⊕[1,a−1]
代码
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,ans;
int xore(int x)
{
if(x%4==0)
return 0;
else if(x%4==1)
return x-1;
else if(x%4==3)
return (x-1)^1;
if(x%4==2)
return 1;
}
int main()
{
scanf("%d%d",&a,&b);
printf("%d",xore(b+1)^xore(a));
return 0;
}