読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

ABC030 D - へんてこ辞書

AtCoderABC Python 競技プログラミング

回答

Submission #552477 - AtCoder Beginner Contest 030 | AtCoder

※ 10^10000とか配列に突っ込みたくなかったので,そういう制約のない言語を使いましたごめんなさい.

回答スライドと一緒なんですが,閉路に突っ込むまでひたすらシミュレーションしていって,もし閉路になる前に終わってしまったらそれを出力,閉路に突っ込んだら,閉路に突っ込むまでのステップ数を減らして,MOD取るみたいな方法でいけます.
ABCのD問題の中でも割と簡単な感じがしました(割とさくさくっと実装できた)

N, a = map(int, input().split())
k = int(input())
bli = [int(i) - 1 for i in input().split()]
current = a-1
visited = [current]
for i in range(k):
    current = bli[current]
    if current in visited:
        subli = visited[visited.index(current):]
        print(subli[(k - len(visited) + len(subli)) % len(subli)] + 1)
        break
    else:
        visited.append(current)
else:
    print(current + 1)