廣義 SAM

Laijinyi發表於2024-09-09

先讓 SAM 的 extend 函式返回 cur

簡單來說,就是先建 Trie 再 BFS 地插入 SAM,其中 last 為 trie 上 u 的父親。

以上是離線構建,線上如何構建?

每次先把 last 設為 0,然後在普通 SAM 上加 3 個特判:

  1. 最開始:
if (nxt[last][c] && len[nxt[last][c]] == len[last] + 1) return nxt[last][c];
  1. 在判完 len[p] + 1 == len[q] 後,若不滿足:
if (p == last) ok = 1, cur = N - 1, --sz;

就是讓 cur 等於一個不會用到的點
3. 函式返回處:

return ok ? clone : p;

正確性證明:先咕著。

相關文章