#include <iostream>
#include <cstdio>
#pragma GCC optimize(2)
using namespace std;
const int maxn = 1e3 + 233;
struct Floor{
int floor, updown, vis, sum;
} k[maxn * 2];
int n, a, b;
int init(){
cin >> n >> a >> b;
for (int i = 1;i <= n;i ++){
cin >> k[i].updown;
k[i].floor = i;
}
k[a].vis = true;
}
void bfs(){
if (a == b) return ;
int head = 0, tail = 1, q[maxn]={0, a};
while (head < tail){
head ++;
int up = k[q[head]].updown;
int down = - k[q[head]].updown;
if (k[q[head]].floor + up <= n && k[q[head] + up].vis == false){
q[++ tail] = k[q[head] + up].floor;
k[q[head] + up].vis = true;
k[q[head] + up].sum = k[q[head]].sum + 1;
}
if (k[q[head]].floor + down >= 1 && k[q[head] + down].vis == false){
q[++ tail] = k[q[head] + down].floor;
k[q[head] + down].vis = true;
k[q[head] + down].sum = k[q[head]].sum + 1;
}
}
}
void print(){
if (k[b].sum == 0){
printf("%d", -1);
return ;
}
printf("%d", k[b].sum);
}
int main(){
init();
if (a == b){
cout << 0;
return 0;
}
bfs();
print();
return 0;
}
为啥我这个开了O2会TLE MLE直接零分
但是关掉O2就AC了(?