2018 8 1字串(汪樂平)

2021-08-22 02:27:57 字數 1271 閱讀 2502

如果(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。它們都以空字元為結束標記,他們在遇到空字...