牛客周赛 Round 49D-嘤嘤不想求异或喵_ 题型:找规律,打表

94 阅读1分钟

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

9a873b071a9048429ade2b5b45c8fe6.png

当i%4=2时,此时sum=i+1.

9b7cd8467ebb39fa54b91e9dae5d7db.png

当i%4=1时,sum=1 3e93015057058e5e26f0ff54bedb308.png 当i%4==3时,此时sum=0

9a873b071a9048429ade2b5b45c8fe6.png

fabdba4c1ffbe1e005aa53017ea74c7.png

#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;
}