题目链接:http://codeforces.com/problemset/problem/500/A
题目意思:给出 n-1 个 cell,每个 cell 有一个值 ai,表示在这个编号为 i 的 cell,能到达i + ai 的cell,但不能反过来,即从 i+ai 到达 i 这个 cell。问从第一个cell 开始,是否可以到达 t 这个cell。
第一次过不了pretest 是因为没有考虑到,如果 t = 1的情况,后来被人 hack 之后就不知道原因了。。。原来是因为第 n 个 cell,默认是 0,应该赋予一个很大的数值!!注意题目只给出 1 ~ n-1 cell 的 ai , 是没有给出 第 n 个的!!!所以要设值,否则代码中的while 会变成死循环的。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = 3e4 + ; int p[maxn]; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
int n, t;
while (scanf("%d%d", &n, &t) != EOF)
{
for (int i = ; i <= n-; i++)
scanf("%d", &p[i]);
p[n] = maxn; // 这个很关键!
bool flag = false;
int i = ;
int step = ; // 初始化为1方便进入while循环的if判断(有可能t==1)
while (step <= n)
{
if (step == t)
{
flag = true;
break;
}
step += p[i];
i = step;
}
printf("%s\n", flag ? "YES" : "NO");
}
return ;
}