警示后人
查看原帖
警示后人
1381257
zhengyi0402楼主2024/10/3 08:41

这道题我开始时写了记忆化:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
const int N = 1e5+1;
int mem[N];
int fb(int x){
	if(mem[x])return mem[x];
	if(x==1||x==2)return mem[x]=1%n;
	else return mem[x]=(fb(x-1)+fb(x-2))%n;
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	int ans = 1;
	while(fb(ans)!=0||fb(ans+1)!=1)ans++;
	cout<<ans<<endl; 
	return 0;
	//十年OI一场空,define int 见祖宗。
	//十年OI一场空,不开long long见祖宗。
}

额。。。。。。

检查了一下,是不是记忆化数组太小了?

于是。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
const int N = 1e10+1;
int mem[N];
int fb(int x){
	if(mem[x])return mem[x];
	if(x==1||x==2)return mem[x]=1%n;
	else return mem[x]=(fb(x-1)+fb(x-2))%n;
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	int ans = 1;
	while(fb(ans)!=0||fb(ans+1)!=1)ans++;
	cout<<ans<<endl; 
	return 0;
	//十年OI一场空,define int 见祖宗。
	//十年OI一场空,不开long long见祖宗。
}

Excuse me???

好像数组开太大了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
const int N = 1e8+1;
int mem[N];
int fb(int x){
	if(mem[x])return mem[x];
	if(x==1||x==2)return mem[x]=1%n;
	else return mem[x]=(fb(x-1)+fb(x-2))%n;
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	int ans = 1;
	while(fb(ans)!=0||fb(ans+1)!=1)ans++;
	cout<<ans<<endl; 
	return 0;
	//十年OI一场空,define int 见祖宗。
	//十年OI一场空,不开long long见祖宗。
}

AC成功!

下次数组要开适当o

2024/10/3 08:41
加载中...