題目鏈結:點我點我:-)
題目描述:
求兩個字串的最長公共子串的長度,字串長度小於等於5∗
105輸入格式:
兩行即兩個字串
輸出格式:
乙個整數,表示兩個字串的最長公共子串的長度
思路:
字尾自動機裸題,入門的乙個好的講解:傳送門
感想:
還是有一些地方不是很理解,特別是匹配的時候有點亂(關於step的問題)
還有乙個同學的習題錦集,可以去做一下:傳送門
(ps: 下方程式中的query函式並沒有用)
**:
#include#include#include#includeusing namespace std;
#define for(i, a, b) for(int i = (a); i <= (int)(b); ++i)
#define n (500000+5)
struct suffix_automaton}}
int query(char *s)
return len;
}}sat;
char s1[n], s2[n];
int main()
ans = max(ans, len);
}printf("%d\n", ans);
return 0;
}
SPOJ 1811 LCS 字尾自動機
題意 求兩個串的最大連續子串 乙個串建sam,另乙個串在上面跑 注意如果走了suffix link,sum需要更新為t u val 1 suffix link有點像失配吧,當前狀態s走不了了就到suffix link指向的狀態fa上去,fa是s的字尾所以是可行的,並且有更多走的機會 include ...
SPOJ 1811 LCS 字尾自動機
題意 求兩個串的最大連續子串 乙個串建sam,另乙個串在上面跑 注意如果走了suffix link,sum需要更新為t u val 1 suffix link有點像失配吧,當前狀態s走不了了就到suffix link指向的狀態fa上去,fa是s的字尾所以是可行的,並且有更多走的機會 include ...
SPOJ8222 字尾自動機
給出乙個字串,求這個字串長度為1 n的子串的最大出現次數 對於長度為x的子串的答案就是所有長度 x的結點的right值的最大值 於是就從反向字尾樹的葉子開始,定義每個關鍵節點的right初始都為1,然後順著求出所有節點的子樹和就可以了 這裡用到了拓撲排序預處理 於是可以很方便的求出right陣列 或...