不懂就问:求助,应该怎么改
查看原帖
不懂就问:求助,应该怎么改
314280
张语诚ZYC楼主2021/7/18 09:55
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e2+10;
int k[MAXN];
int f[MAXN];
bool from[MAXN][MAXN];
inline int read_int() {
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {
		if(ch=='-') {
			w=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') {
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
int dfs(int n,int i,int fr,int t){
	if(i<0){
		return 0;
	}
	if(i>n){
		return 0;
	}
	if(from[fr][i]==true){
		if(f[i]<t){
			f[i]=t;
		}
		return f[i];
	}
	else{
		from[fr][i]=true;
	}
	if(f[i]==-1){
		f[i]==0;
	}
	f[i]+=1;
	dfs(n,i+k[i],i,++t);
	dfs(n,i-k[i],i,++t);
	return f[i];
}
int ret(int n,int a,int b){
	int d=dfs(n,a,0,1);
	if (d==0){
		return -1;
	}else{
		return d;
	}
}
int main() {
	memset(f,0xff,sizeof(f));
	memset(from,false,sizeof(from));
	int n=read_int();
	int a=read_int();
	int b=read_int();
	for(int i=1;i<=n;i+=1){
		k[i]=read_int();
	}
	printf("%i \n",ret(n,a,b));
	return 0;
}
2021/7/18 09:55
加载中...