はまやんはまやんはまやん

hamayanhamayan's blog

Trained? [AtCoder Beginner Contest 065 B]

http://abc065.contest.atcoder.jp/tasks/abc065_b

解説

http://abc065.contest.atcoder.jp/submissions/1379756

この問題を見てまず気づくことが「状態は決定的に遷移する」ということ。
つまり、初期状態から次の状態へは1通りしかないので、愚直にシミュレーションしていっても間に合うなということが分かる。
(点数的にもシミュレーションだろうとも思える)
なので、最大の10^5回ほどシミュレーションしてみて、ボタン2が光らないなら"-1"で、ボタン2が光ったら、その時点で回数を答える。

以下のコードは1-indexedで書いている。
問題によっては1-indexedで書いた方がデバッグに役に立つ場合がある。
(今回はそんなに複雑ではないので、なんでもいいけれど)

int N, A[101010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 1, N + 1) cin >> A[i];
 
    int cur = 1;
    rep(i, 0, 101010) {
        cur = A[cur];
        if (cur == 2) {
            printf("%d\n", i + 1);
            return;
        }
    }
    printf("-1\n");
}