//那些/// @brief 都是废话,不要管
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
/// @brief
const int MAXN=114514;
/// @brief
bool flag = true;
/// @brief
int dist[MAXN];
/// @brief
bool visited[MAXN];
/// @brief
int n,a,b;
/// @brief
int k[MAXN],i;
/// @brief
/// @param i
/// @param p
/// @return
//写的废话
int up(int i,int p)
{
return i+k[i];
}
/// @brief
/// @param i
/// @param p
/// @return
int down(int i,int p)
{
return i-k[i];
}
/// @brief
main() {
cin>>n>>a>>b;
for (int i = 1; i <= n; i++) {
cin >> k[i];
}
memset(dist, -1, sizeof(dist));
memset(visited, false, sizeof(visited));
//vscode自动生成的
dist[a] = 0;
visited[a] = true;
while (flag) {
flag = false;
for (int i = 1; i <= n; i++) {
if (visited[i]) {
int up = i + k[i];
if (up <= n && !visited[up]) {
visited[up] = true;
dist[up] = dist[i] + 1;
flag = true;
}
int down = i - k[i];
if (down >= 1 && !visited[down]) {
visited[down] = true;
dist[down] = dist[i] + 1;
flag = true;
}
}
}
}
cout << dist[b] << endl;
return 0;
}
老师写的代码,我写了一半,另一半是我补的.