B - Ticket Gate Log 解説 by sounansya


以下の条件を満たす最小の正整数 \(c\)\(c_0\) とします。

  • \(T\)io\(c\) 回繰り返した文字列とすると、 \(S\)\(T\) の(連続とは限らない)部分列となっている。 … \((\star)\)

すると、求める答えは \(S\) の長さを \(N\) として \(2c_0-N\) となることが分かります。これは、

  • \(S\)\(T\) の(連続とは限らない)部分列となっていれば何回かの操作で \(S\)\(T\) にすることができる。
  • \(T\) は問題文中の条件を満たす。

ことから従います。

よって、 \(c\)\(1\) から昇順に試していき、 \((\star)\) の条件を満たすかを順番に確かめていけば良いです。

実装例(Python3)

def is_subsequence(s, t):
    it = iter(t)
    return all(c in it for c in s)


s = input()
c = 1
while True:
    t = "io" * c
    if is_subsequence(s, t):
        print(2 * c - len(s))
        break
    c += 1

投稿日時:
最終更新: