頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC065 B - Trained?

問題はこちら atcoder.jp

方針

ボタンの挙動は問題文の通りに作ります。

問題はボタン 2 が点けられるかの判定ですが,N 回の操作後までにボタン 2 が光らない場合,初期のボタン 1 も含めてこれまでに N+1 回ボタンが光っています。ボタンの数は N 個なので,少なくとも 1 個のランプが 2 度光っています。つまりループしています。多分鳩の巣原理です。

コード

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;

    vector<int> a(n);
    for(int i=0; i<n; i++){
        cin>>a[i];
    }

    int count=1,value=0;

    while(a[value]!=2){
        value=a[value]-1;
        count++;
        if(count>n){
            count=-1;
            break;
        }
    }

    cout<<count<<endl;
}