# coding: utf-8
# 入力を受け取る
N, K, M = [int(i) for i in input().split()] # しりとりをする人数、単語リストの数、しりとりの発言数を取得
d_dict = {input() for i in range(K)} # 単語リストをセットに格納
m_list = [input() for i in range(M)] # しりとりの発言ログをリストに格納
n_list = [i + 1 for i in range(N)] # プレイヤーの番号リストを作成
n = 0 # 現在のプレイヤーのインデックス
flg = 0 # 直前のプレイヤーがルールを破ったかどうかを示すフラグ
# しりとりの発言を順番に処理する
for i in range(len(m_list)):
z = "" # ルールを破ったプレイヤーの番号を格納する変数
if m_list[i] in d_dict:
d_dict.remove(m_list[i]) # 発言された単語を単語リストから削除
if m_list[i][-1:] == "z": # 発言が "z" で終わる場合
z = n_list[n]
flg = 0
elif flg == 1 and m_list[i-1][-1:] != m_list[i][:1]: # 前の単語の末尾と現在の単語の先頭が一致しない場合
z = n_list[n]
flg = 0
elif flg == 0: # ルールに従っている場合
flg = 1
else:
z = n_list[n] # 単語がリストに存在しない場合
flg = 0
# 次のプレイヤーに移動
if flg == 1 or n == len(n_list) - 1:
if n >= len(n_list) - 1:
n = 0
else:
n += 1
# ルールを破ったプレイヤーをリストから削除
if z != "":
n_list.remove(z)
# 最後に残ったプレイヤーの数と番号を出力
print(len(n_list))
for i in n_list:
print(i)
説明
-
入力の取得
-
N
,K
,M
を取得し、それぞれしりとりをする人数、単語リストの数、しりとりの発言数を示します。 -
d_dict
は単語リストをセットとして格納します。 -
m_list
はしりとりの発言ログをリストに格納します。 -
n_list
はプレイヤーの番号リストを作成します。
-
-
しりとりの進行
- しりとりの発言を順番に処理します。
- 各発言が単語リストに含まれているかを確認し、含まれていればセットから削除します。
- ルールに従っているかどうかをチェックし、従っていない場合はプレイヤーをリストから削除します。
-
プレイヤーの管理
- 現在のプレイヤーのインデックス
n
を管理し、次のプレイヤーに移動します。 - ルールを破ったプレイヤーの番号をリストから削除します。
- 現在のプレイヤーのインデックス
-
結果の出力
- 最後に残ったプレイヤーの数と番号を出力します。
このプログラムは、しりとりのルールに基づいてプレイヤーが脱落する過程をシミュレートし、最終的に残ったプレイヤーのリストを表示します。