C++,codeforces,500A,A. New Year Transportation

/*
codeforces,500A,A. New Year Transportation
有n个房间,标号1---n
有n-1个传送门, 标号1---(n-1),用a_i表示第i个传送门
第i个传送门可以让人从房间i传送到房间i+a_i, 1<=a_i<=n-i
通过传送门最远能前进(n-i)个房间,也就是最远能到达房间n
并且无论从哪个房间开始,一直移动,最终一定能到达房间n

问能否从房间1传送到房间t
输入:
n t
a_1 a_2 ... a_{n-1}
*/
#include <iostream>
int main(){
    int n,t;std::cin>>n>>t;
    if(t==1||t==n){
        //若目的房间是1,则初始就已到达
        //若目的房间是n,则最终一定能到达
        std::cout<<"YES"<<std::endl;
        return 0;
    }

    //从房间1开始,记录每次移动到的房间
    int currI = 1;

    for(int i = 1;i<n;++i){
        if(currI==t){
            //若上次移动后到达的房间是目的房间
            std::cout<<"YES"<<std::endl;
            return 0;
        }else if(currI>t){
            //若上次移动后到达的房间已经超过目的房间
            std::cout<<"NO"<<std::endl;
            return 0;
        }else{
            //若上次移动后到达的房间还未到达目的房间

            int a;std::cin>>a;
            if(currI==i){
                //若本次获取的传送门的入口是当前移动到的房间
                //则进行移动
                currI+=a;
            }
        }
    }
    //下面的代码应不会被执行
    if(currI==t){
        //此时currI和t的值应是n
        std::cout<<"YES"<<std::endl;
    }else{
        std::cout<<"NO"<<std::endl;
    }
    return 0;
}
posted @ 2025-02-11 15:58  Kazuma_124  阅读(23)  评论(0)    收藏  举报