站外题,求助
  • 板块学术版
  • 楼主thrX
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/9/26 20:29
  • 上次更新2024/9/26 22:09:20
查看原帖
站外题,求助
710862
thrX楼主2024/9/26 20:29

是2021年牛客的依久依久

定义val(i)i分解为若干个不相邻斐波那契数的异或和,输入lr,求val(l)val(r)的异或和

这是我的代码

#include<bits/stdc++.h>
using namespace std;
const int n=86;
int fib[10086],s[10086];
int t;
long long l,r;
long long solve(long long l,long long r){
    if(l>r)return 0;
    int L=lower_bound(fib+1,fib+n+1,l)-fib,R=upper_bound(fib+1,fib+n+1,r)-fib-1;
    if(L>R){
        long long rt=((r-l+1)&1)?fib[R]:0;
        rt^=solve(l-fib[R],r-fib[R]);
        return rt;
    }
    long long rt=s[R]^s[L]^fib[L];
    rt=rt^solve(l,fib[L]-1)^solve(fib[R]+1,r);
    return rt;
}
int main(){
	
	freopen("yijiu.in","r",stdin);
	freopen("yijiu.out","w",stdout);
	fib[1]=1,fib[2]=2,s[1]=1,s[2]=3;
	for(int i=3;i<=n;i++){
		fib[i]=fib[i-1]+fib[i-2];
		s[i]=s[i-1]^s[i-2]^fib[i-2]^fib[i];
		if((fib[i-2]-1)&1){
			s[i]^=fib[i-1];
		}
	}
	cin>>t;
	while(t--){
		cin>>l>>r;
		cout<<solve(l,r)<<'\n';
	}
	
	return 0;
} 

但是最后四个点RE\color{purple}{RE} 了,不知道为什么,找了TJ(没有CTJ)甚至玄学的照着TJ改了很多地方的写法,结果还是RuntimeErrow\color{Purple}{Runtime Errow}

想问问怎么改

2024/9/26 20:29
加载中...