题解 | #跳跃游戏(一)#

跳跃游戏(一)

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;
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务