数据范围
• 对于30% 的数据,1<= N <= 10。
• 对于60% 的数据,1<= N <= 1 000。
• 对于100% 的数据,1 <= N<= 100000,1 <= Ai <= N。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a,v[100000],b,r[200000][2],qu,quu,quuu,ans,i,ansu,quuuu;
bool p[100000];
int main()
{
scanf("%d",&a);
for (b=1;b<=a;b++)
{
scanf("%d",&v[b]);
}
r[1][1]=1;
qu=1;
quu=1;
p[1]=true;
while (qu<=quu)
{
ans++;
quuu=quu+1;
quuuu=quu;
for (i=qu;i<=quuuu;i++)
{
ansu=v[r[i][1]]+r[i][2];
if (p[ansu]==false)
{
if (ansu==a)
{
printf("%d",ans);
return 0;
}
p[ansu]=true;
quu++;
r[quu][1]=ansu;
}
if ((r[i][2]>0)&&(r[i][2]+v[r[i][1]]<a))
{
quu++;
r[quu][1]=r[i][1];
r[quu][2]=r[i][2]+1;
}
else
if ((r[i][2]<0)&&(r[i][2]+v[r[i][1]]>0))
{
quu++;
r[quu][1]=r[i][1];
r[quu][2]=r[i][2];
}
else
if (r[i][2]==0)
{
quu++;
r[quu][1]=r[i][1];
r[quu][2]=1;
quu++;
r[quu][1]=r[i][1];
r[quu][2]=-1;
}
}
qu=quuu;
}
}