競技プログラミング用 知識集積所

ARC201C - Prefix Covering

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

簡単な内容は省略

考え方

文字列の接頭辞の話なので、Trie木(未作成)の利用を考える。

例えば"AAB"に対応するノードには、
  • ちょうどAABで終わる文字列の個数
  • AABから始まる任意のAB文字列に対してはよい、AABから始まる文字列だけ考えた部分集合の数
  • よいか悪いか関係なく、AABから始まる文字列だけ考えた部分集合の数
を記録しておけばよい。

文字列が追加されたとき、その範囲内ではよい集合は、
  • そもそもそこで終わる文字列が含まれる集合
  • それにAを足したもの、Bを足したもの、両方にとって範囲内でよい集合ができている場合
の2パターンである。
よってこれを文字列の末尾から遡りながら更新していけばよい。

解答例


注意点


別解

タグ:

Trie木 二分木
ウィキ募集バナー