题目描述

给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。 例如:$A = [2,3,1,1,4]$ 能够跳跃到最后一个下标,输出true; $A = [3,2,1,0,4]$ 不能跳跃到最后一个下标,输出false。

输入

第一行输入一个正整数 $n(1 \leq n \leq 500)$,接下来的一行 $n$ 个整数,输入数组 $A_i$。

输出

如果能跳到最后一个下标,输出true,否则输出false。

样例输入

5
2 0 2 0 1

样例输出

true
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int n,num[],dp[];
void init() {
cin>>n;
range(i,,n-)cin>>num[i];
}
void solve(){
bool ans=false;
if(n==)ans=true;
int pos=;
while(pos<n-){
pos+=num[pos];
if(!num[pos]&&pos!=n-)break;
if(pos==n-){ans=true;break;}
}
cout<<(ans?"true":"false")<<endl;
}
int main() {
init();
solve();
return ;
}
05-11 21:54