作為乙個傻叉,這兩天才學了sam,做了幾道題。
先是模版:
//字尾自動機
//sam
//suffix automation
struct state
};state *root,*last;
state seq[maxn*2];int seq_cnt;
state *new(int _len)
void extend(int w)
else
}last=np;
}void init()
然後是一些題目
poj1509 sam求最小迴圈串(字尾自動機)
spoj1811最長公共子串問題(字尾自動機)
spoj 8222 substrings(sam)給乙個字串s,令f(x)表示s的所有長度為x的子串中,出現次數的最大值。求f(1)..f(length(s))
spoj-1812 longest common substring ii題意:求多個串的最長公共子串。
spoj 7258 sublex (sam)題目:給出乙個串,查詢字典序排在第k個的是哪個子串
hdu-4622 reincarnation 題意:給定乙個字串,長度最長為2000,有至多10000組詢問,每個詢問給定乙個區間,求出該區間內共有多少個不同的子串。
hdu4641 k-string,字尾自動機,並查集
【poj1743】musical theme 我們只在意每個節點的right最大值和最小值就行了
【bzoj3676】[apio2014]回文串 sam+manacher+倍增
我們可以發現不同的回文串其實並不多 所以用manacher找出不同的回文串然後sam找對應串就好
還聽說了乙個奇怪的資料結構回文樹(palindromic tree)
3926: [zjoi20150]諸神眷顧的幻想鄉 挺有意思的應用 加深了對sam的理解
bzoj2806(字尾自動機+dp)
字尾自動機小結
還沒寫完字尾自動機就來寫小結了 其實是莫比烏斯又推不下去了 其實還是迪哥的hhh 1,有關新建節點的幾種分類討論要記住,大概 yy 板子還是可以用的 2,字首節點指的是當前點所代表的 endpos 集合所對應的串中有乙個原串的字首。具體來說就是新建的 p 節點 3,如果維護樹形結構的話一般是 par...
廣義字尾自動機小結
字尾自動機功能很強大,但碰到多串問題就掛。廣義字尾自動機支援多串操作。思想是在每次插入乙個串後,把las設為1即可,其它操作在parent樹上進行表演。bzoj 3277 includeusing namespace std typedef long long ll const int n 3e5 ...
字尾自動機
基礎知識 step i 表示的是字串i在原字串中的位置。pareint i 表示root到parent i 的子串是root到i的最長字尾。字尾自動機遍歷可以得到原字串的所有子串。特殊技巧 一 字尾自動機的不同子串數有兩種求法 1.ans step i step parent i 1 i cnt 2...