AC+WA+RE 70pts
灌水区更多人看才在这里发
#include<bits/stdc++.h>
using namespace std;
int n,a,b,A[1100000];
bool vis[1100000];
struct st{
int point,step;
};
int bfs(){
queue<st> q;
q.push({a,0});
vis[a]=1;
while(!q.empty()){
st curp=q.front();
q.pop();
int upp=curp.point+A[curp.point],dnp=curp.point-A[curp.point];
int ups=curp.step+1,dns=curp.step+1;
if(upp==b){
cout<<ups;
return 0;
}
if(dnp==b){
cout<<dns;
return 0;
}
if(upp<=n&&upp>=1&&vis[upp]==0){
vis[upp]=1;
q.push({upp,ups});
}
if(dnp<=n&&dnp>=1&&vis[dnp]==0){
vis[dnp]=1;
q.push({dnp,dns});
}
}
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
cin>>A[i];
bfs();
return 0;
}