题解 | #跳跃游戏(一)#
跳跃游戏(一)
https://www.nowcoder.com/practice/07484f4377344d3590045a095910992b
#include<iostream> #include<queue> using namespace std; const int N=2e5+6; int arr[N]; int n; bool vis[N]; // 下标是否被访问过 queue<int> que; // 存下标 int main(){ ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); cin>>n; for(int i=0;i<n;i++){ cin>>arr[i]; } que.push(0); vis[0]=true; bool sign=false; int ma_ind=0; while(!que.empty()){ int ind=que.front(); que.pop(); // cout<<ind<<" "<<arr[ind]<<endl; if(ind==n-1){ sign=true; break; } int nex; for(int i=ma_ind+1;i<=ind+arr[ind];i++){ if(i>n) break; if(!vis[i]){ que.push(i); vis[i]=true; nex=i; } } ma_ind=nex; } if(sign) cout<<"true"; else cout<<"false"; return 0; }