AtCoder Beginner Contest 287 E問題 Karuta
問題
提出解答
問題の概要
個の英小文字からなる文字列
が与えられる.
2つの文字列 に対して,
を以下を満たす最大の非負整数
と定義する.
の先頭
文字が一致する.
このとき, に対して, 以下の
を求めよ.
制約
は英子文字列
解法
各 に対して, 非負整数
において
とする. このとき, 以下は同値である.
の先頭
文字を prefix とするような文字列が
の中に (
を含めて)
つ以上存在する.
このとき, のうち, prefix が
であるような文字列の個数を求めるとき, Trie 木を利用することによって,
時間で判定できる.
このことを利用して, 次のようにすることで正解できる.
から Trie 木
を生成する.
の順に以下を実行する.
の順に以下を実行する:
における
文字目を表している頂点
へ移動する *1.
を根とする部分木において, 末端文字を担う頂点の数が
未満になるならば,
として, 繰り返しを終了する.
でも
が確定しなかった場合は
である.
この方法によって, 時間で
を求めることができた.
*1: の作り方から必ず存在する.