きろく

特筆すべき記録のまとめ

diverta 2019 Programming Contest:C - AB Substrings

問題

atcoder.jp

解法

まず,各 s_i 中に含まれる "AB" の数を答えに加算する.これは,どういう順番で文字列を結合させても "AB" はそのままになるから.

問題は各 s_i の最初の 1 文字と最後の 1 文字をどう組み合わせていくかになる.よって,この 2 つの間の文字列は結合によって生じる "AB" に関与しない.文字列の結合によって新しく生じる "AB" の数は,max('B' が最初に現れる回数, 'A' が最後に現れる回数) となる.しかし,これら 2 つの回数に関与する文字列が全て "BA" であった場合,答えから -1 する必要がある.なぜならば,環状に文字列をつながない限り不可能であるから.O(N * |S|).

解答

atcoder.jp

f:id:babcs2035:20190512101754p:plain