考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC109-B - Shiritori を解く

ABC109-B - Shiritori

 

複数の文字列が与えられる

与えられた順で見たとき、それがしりとりとして成立しているかを判定する問題

 

基本的に文字列の末尾の文字を確認して

それが次の文字列の先頭の文字と一致しているかを見ればいいだけであるが

一度使った文字は使えないというルールもあるので

その確認もしなければならない

 

今回は、一度出てきた文字をリストに保存しておき、

しりとり判定を行う際にその文字が以前出てきていないか

その都度確認していくことにした

 

重複の判定には count 関数を使用する

count 関数による重複判定は計算量が大きくなりがちではあるが

例によって制約が緩いので(2 <= N <= 100)問題はないと判断した

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
N=int(input())

# 最初の文字
s=input()

# 言った文字を保存する
l=[]
l.append(s)

# しりとり開始
for i in range(N-1):
  t=input()

  # しりとりが成立しているか判定
  if s[-1]!=t[0]:
    print('No')
    exit()

  # 今までに言っていないか判定
  if l.count(t)>0:
    print('No')
    exit()

  # 言った文字を保存
  l.append(t)

  # 次へ
  s=t

# 最後までしりとりが続けば "Yes"
print('Yes')

 

提出結果はACでした