提高第7场c题
#include<bits/stdc++.h>
using namespace std;
int T;
const int N=75;
unsigned long long fab[N+1];
bool t1=0,t2=0;
unsigned long long memo;
void ap(void)
{
fab[1]=1;fab[2]=1;
for(int i=3;i<=N;i++) fab[i]=fab[i-1]+fab[i-2];
return;
}
unsigned long long solve(unsigned long long n)
{
if(t1==1)
{
t1=0;
t2=1;
return (memo xor 1) xor 2;
}
else if(t2==1)
{
t1=0;
t2=0;
return (memo xor 2) xor 3;
}
unsigned long long sum=0;
while(n!=0)
{
int site=(lower_bound(fab+1,fab+N,n)-fab);
if(fab[site]>n) site--;
sum=sum xor fab[site];
n=n-fab[site];
if(fab[site]==1) t1=1;
if(fab[site]==2) t2=1;
}
return sum;
}
int main()
{
unsigned long long ans=0;
cin>>T;
ap();
for(int i=1;i<=T;i++)
{
ans=0;
unsigned long long l,r;
cin>>l>>r;
for(unsigned long long j=l;j<=r;j++)
{
t1=0;
t2=0;
unsigned long long ss=solve(j);
ans=ans xor ss;
memo=ss;
}
cout<<ans<<endl;
}
}
为什么t了,求解