46分玄关,大佬求调
查看原帖
46分玄关,大佬求调
1244161
jexst楼主2024/9/4 20:49
#include <bits/stdc++.h>
using namespace std;
int n, a, b, ans;
bool flag=true;
int k[100010];
void dfs1(int floor){//从第一层到第a层 
	if(floor==a)
		return;//满足条件返回 
	if(floor>a){
		flag=false;//如果大于说明走过了,递归往下走就死循环了 
		return;
	}
	if(floor<a){
		ans++;
		floor+=k[floor];
	}
	dfs1(floor);
}
void dfs2(int floor){//从第a层到第b层
	if(a<b){
		if(floor==b)
			return;
		if(floor>b){
			flag=false;
			return;
		}
		if(floor<b){
			ans++;
			floor+=k[floor];
		}
		dfs2(floor);
	}
	else{
		if(floor==b)
			return;
		if(floor<b){
			flag=false;
			return;
		}
		if(floor>b){
			ans++;
			floor+=k[floor];
		}
		dfs2(floor);
	}
}
int main(){
	cin >> n >> a >> b;
	for(int i=1; i<=n; i++)
		cin >> k[i];
	if(a==b){//特判 
		cout << 0;
		return 0;
	}
	dfs1(1);
	if(!flag){//flag记录能不能走到 
		cout << -1;
		return 0;
	}
	flag=true;//初始化 
	dfs2(a);
	if(!flag){
		cout << -1;
		return 0;
	}
	cout << ans;
	return 0;
} 
2024/9/4 20:49
加载中...