考えて競プロする

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

ABC023-B - 手芸王 を解く

ABC023-B - 手芸王

 

b

abc

cabca

bcabcab

abcabcabc

cabcabcabca

bcabcabcabcab

 

といった感じで文字列が作られていくとき

与えられた文字列が存在するかどうかを判定する問題

 

文字列の長さNの制約は 1N100 と小さいので

上記の手順をシミュレーションしても問題なさそうだ

   

提出したコード

# 入力
N=int(input())
S=input()

# 手順
c=0

# 初期値
x='b'

# 一致確認
if x==S:
  print(c)
  exit()

# 手順フラグ 1->2->3->1->...
f=1

# 最大100回まで
for i in range(100):
  # 手順フラグ1のとき(左端に'a'、右端に'c')
  if f==1:
    x='a'+x+'c'
    f=2
  # 手順フラグ2のとき(左端に'c'、右端に'a')
  elif f==2:
    x='c'+x+'a'
    f=3
  # 手順フラグ3のとき(左端に'b'、右端に'b')
  elif f==3:
    x='b'+x+'b'
    f=1
  # 手順数のカウント
  c+=1
  # 一致確認
  if x==S:
    print(c)
    exit()

# 一致しなかった場合は'-1'を出力
print(-1)

 

ループは最大の100回まではやる必要はないが

入力値によって回数を調整するのは面倒なので全部100回までやることにした

 

提出結果はACでした