Open Astral-23 opened 3 months ago
verified : https://atcoder.jp/contests/tenka1-2016-final/submissions/55591711 文字列の集合がある時、その集合にクエリを飛ばしたい... な問題? 或いは、文字列を1ずつ伸ばしていく処理を高速に行う...問題。 : https://atcoder.jp/contests/abc353/tasks/abc353_e 文字列の集合がある時、全てのペア(i, j)について...な問題
文字の種類数が小さい文字列・数列に対するTrie
Trie<int char_size, int mergin>()
... [mergin, mergin + char_size) の範囲の文字を扱うTrie木を作る。 $O(1)$
以下、操作の過程で管理している整数xが、0でない桁を最大でn桁保持したとする。
template <class T> int insert(T str)
... 文字列strを $1$ つ挿入。
template <class T> void erase(T str, int id)
... idが割り振られた文字列strを削除する。
template<class T> vector<int> count(T str, bool pref)
...文字列strに対し、 res[i] := strの[0, i] に対応する部分文字列が、trieに何個存在するか を返す。
pref = true
... カウントする文字列の対象として、挿入された文字列のprefixも含むpref = false
... カウントする文字列は、挿入された文字列のみである。template <class T, class F> void query(T str, F f)
...trie内でstrを探索する過程で訪れる全てのノードについて、そのノードを終点とする文字列に対し、関数 $f$ を呼ぶ。
int
を $1$ つ受け取らなければならない。これには、文字列のidが渡される。int size()
...幾つの文字列が登録されているかを返す。
一旦nsで受け取る必要なくない? forの中に関数in
実際使う時は結構中身書き換える https://atcoder.jp/contests/agc047/submissions/58916625 insert/query/パラメータmakeの変更を抑えれば十分と思う この会では、queryにおいて、[0, i) + [i, n)にある任意の一文字 の分岐も許す $O(26 * n)$
参考 : https://ei1333.github.io/luzhiled/snippets/structure/trie.html