nokoのブログ

こちらは暫定のメモ置き場ですので悪しからず

ABC167-D_Teleporterをpythonで解いた(その他)

問題

考え方

f:id:noko_htn:20200516193627j:plain

ポイント

  • 考察大事。サンプルを書き出す。
  • flag系は、はじめにリストを用意しておく
    • seen = [-1]*(n+1)
  • indexと○個目の対応は、メモを書きながらミスらないようにする
    • a_list = [0] + list(map(int,input().split()))
    • roop_end_index = len(town_hist_list) - 1

解法

n,k = map(int,input().split())
a_list = [0] + list(map(int,input().split()))

town_num_tmp = 1  # 今いる町
seen = [-1]*(n+1) # indexの街に訪れたことがあるか(訪れたことがない: -1)
town_hist_list = []

while seen[town_num_tmp] == -1:
    seen[town_num_tmp] = 1
    town_hist_list.append(town_num_tmp)
    # 更新
    town_num_tmp = a_list[town_num_tmp]

roop_end_index = len(town_hist_list) - 1
roop_start_index = town_hist_list.index(town_num_tmp)
roop_range = roop_end_index - roop_start_index + 1

if k < roop_end_index:
    print(town_hist_list[k])
else:
    print(town_hist_list[(k-roop_start_index)%roop_range+roop_start_index])