DLZ耍蛇
ProblemBackground
DLZ一到机房,所有Dalao便都看着他笑,有的叫道,“DLZ,你又要耍蛇了!” 他不回答,跑到全班面前,“这是我从印度进口的灵蛇。”便从兜里掏出九条大蛇。他 们又故意的高声嚷道,“你一定又被石锤了!”DLZ睁大眼睛说,“你怎么这样凭空污 人清白……”“什么清白?我前天亲眼见你在LH面前耍蛇,被吊着打。”DLZ便涨红 了脸,额上的青筋条条绽出,争辩道,“耍蛇被打能叫被锤吗……耍蛇!……读书人的事, 能算石锤么?”接连便是难懂的话,什么“苟币LH”,什么“吃土”之类,引得众人 都哄笑起来:机房内外充满了快活的空气。
Problem Discrioption
DLZ的蛇可被分为若干段,第i段蛇的灵力为i,DLZ使用的是传统耍蛇法,他每 一次耍蛇从L到R的一段,耍蛇之后,蛇会减少L到R的灵力和。由于某些特殊原因, 灵力是用异或求和的。如果不能及时补充,蛇就挂了,DLZ数学太菜了,为了拯救他的 蛇,他向你求助。
Input
两个整数L,R(L<R)
Output
一个整数表示L到R的灵力和
SampleInput
2 7
SampleInput
1
Data Scale
测试点编号 |
数据规模 |
1~4 |
L,R≤1e7 |
5~7 |
R-L≤1e7 |
8~10 |
L,r≤1e18 |
记得我前面的博客的ZYH的XOR吗,一个道理
不过一个结论是[L,R]=[1,R]^[1,L-1]
然后就O(1)了
code:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 long long cal(long long a){return a%4==1?1:((a%4==2)?a+1:(a%4==0?a:0));} 5 int main(){ 6 freopen("snake.in","r",stdin); 7 freopen("snake.out","w",stdout); 8 long long l,r;cin>>l>>r; 9 cout<<(cal(r)^cal(l-1)); 10 return 0; 11 }
over