如果(n
−nex
t[n]
) (n−
next
[n])
是n的因子,那麼最小迴圈節長度就是這個,否則是n
沿著kmp自動機按照樹邊累加貢獻
把每個串丟進hash,求一下就行了
注意特判0
二分+hash求lcp就行了
二分+hash,需要把hash值丟進splay維護
直接加起來就行了
hash去個重就行了
二分答案,按照height分為若干組
查詢有沒有一組超過k
在樹上跑的時候加權值判斷一下
要特判0
沿著fail樹直接累加貢獻
如果某個字首的fail包含了某個模式串,那麼這個字首也包含某個模式串
把所有模式串打上標記,標記沿fail樹下傳
考慮沒有打標記的結點,如果存在環則有長度無限的主串
二分答案,按height將字尾分為若干組,查詢有沒有某一組字尾個數》=k即可
倍長加字串以及在末尾加字元都是很好處理的
在開頭加字元我們需要在sam的反串字尾樹上跳才正確
查詢的時候在dfs序上用主席樹查詢
給每個葉子結點建立一顆trie
合併成一顆trie
給這顆trie建sam,求一遍σl
en[x
]−le
n[fa
il[x
]]σ le
n[x]
−len
[fai
l[x]
]『
sam很多東西是不能動態的
於是出現了字尾平衡樹
本質上是用平衡樹維護字尾陣列
對於每個字尾維護乙個標號,滿足較小的字尾標號較小
標號按照類似線段樹的思想標號
但是這樣就不能旋轉了
做法①:不旋轉(使用替罪羊樹)
做法②:保證旋轉的複雜度(使用treap)
當然是sam+lct啦(逃)
可以用字尾平衡樹
詢問等價於》=t,
考慮如何維護
只考慮在頭尾插入刪除
先考慮維護乙個正向乙個反向的字尾平衡樹
那麼在頭尾插入刪除就相當於對這兩個字尾平衡樹進行操作
考慮中間怎麼處理
從中間截斷,前後各維護兩個,總共維護4個字尾平衡樹,每次在對應位置操作。然後維護兩段長度相等
詢問操作如果單在左邊右邊我們只要在平衡樹內查詢即可。如果跨了左右平衡樹,那麼我們暴力kmp做,時間複雜度是可以保證的
字串1 字串的旋轉
題目描述 給定乙個字串,要求將字串前面的若干個字元移到字串的尾部。例如 將字串 abcdef 的前三個字元 a b c 移到字串的尾部,那麼原字串將變成 defabc 首先想到的是將需要移動的字元乙個乙個移到字串的尾部。實現如下 public class transfet s n 1 t publi...
字串(一) 字串Hash
今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...
18 字串 char型字串
1 什麼是字串?字串是以空字元 0 結尾的字元陣列。空字元的assii碼為 0,空格的ascii碼為32 2 0的作用 0 是乙個空字元標誌,它的assii碼為0,c 有好多處理字串的函式,都以 0 為結束標記。也就是以空字元為結束標記,比如cin,cout。它們都以空字元為結束標記,他們在遇到空字...