2
0

# 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)

説明

  1. 入力の取得

    • N, K, Mを取得し、それぞれしりとりをする人数、単語リストの数、しりとりの発言数を示します。
    • d_dictは単語リストをセットとして格納します。
    • m_listはしりとりの発言ログをリストに格納します。
    • n_listはプレイヤーの番号リストを作成します。
  2. しりとりの進行

    • しりとりの発言を順番に処理します。
    • 各発言が単語リストに含まれているかを確認し、含まれていればセットから削除します。
    • ルールに従っているかどうかをチェックし、従っていない場合はプレイヤーをリストから削除します。
  3. プレイヤーの管理

    • 現在のプレイヤーのインデックスnを管理し、次のプレイヤーに移動します。
    • ルールを破ったプレイヤーの番号をリストから削除します。
  4. 結果の出力

    • 最後に残ったプレイヤーの数と番号を出力します。

このプログラムは、しりとりのルールに基づいてプレイヤーが脱落する過程をシミュレートし、最終的に残ったプレイヤーのリストを表示します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0