D-嘤嘤不想求异或喵_牛客周赛 Round 49 (nowcoder.com)
首先很明显可以看出来这题是考察异或和的,那我们就要知道异或的性质.
像这种n超过1e9的极大概率要找规律,要学会利用暴力找规律.我们可以通过打表找规律.这里我们把1~100的异或和输出:
#include<bits/stdc++.h>
using namespace std;
int l,r;
void solve()
{
int sum=0;
for(int i=1;i<=100;i++)
{
sum^=i;
cout<<i<<" "<<sum<<endl;
}
}
int main()
{
int t=1;
while(t--)
{
solve();
}
return 0;
}
我们发现当i是4的倍数的时候,此时的sum就是i
当i%4=2时,此时sum=i+1.
当i%4=1时,sum=1
当i%4==3时,此时sum=0
#include<bits/stdc++.h>
using namespace std;
int l,r;
int f(int x)
{
if(x%4==0)return x;
else if(x%4==1)return 1;
else if(x%4==3)return 0;
else return x+1;
}
void solve()
{
cin>>l>>r;
cout<<(f(r)^f(l-1))<<endl;
}
int main()
{
int t=1;cin>>t;
while(t--)
{
solve();
}
return 0;
}