琦不會字尾自動機……
是以前太浪了……
所以所有東西都留到了noi前來學……
馬上狗牌退役了tat(心塞qwq
題目大意:給出兩個串a,b,求a、b的最長公共子串
對a建字尾自動機,然後用b去匹配,若能匹配上就轉移到兒子,否則沿著parent樹向上跳
#include
#include
#include
#include
#define n 500005
using
namespace
std;
int n,m,last = 1,tot = 1,p,q,np,nq,ans;
int son[n][26],par[n],mx[n];
char a[n],b[n];
int new_node(int x)
void add(int x)
}last = np;
}int main()
ans = max(ans,l);
}cout
<< ans << endl;
return
0;}
SPOJ LCS 字尾自動機
題面傳送門 題意 給出兩個 n 250000 的字串,求最長公共子串。思路 把第乙個字串放到sam裡面去。對於第二個串,能匹配則匹配,不能匹配就跳回能匹配的位置,如果乙個都不能匹配,則cur要重新初始化為root。對字尾自動機的理解還比較模糊,怕誤人子弟,此題就不做詳述。include define...
SPOJ LCS2 字尾自動機
題意 求多個串的lcs 思路 跟上題一樣的東西 只不過多加乙個臨時的dp陣列來儲存所有的狀態的最小值 然後求所有子串的最大值就好了 include include include include include include include include include include incl...
SPOJ LCS2 字尾自動機
給多個字串,問最長公共子串。最長公共子串用字尾自動機還是很方便的,首先的話,有乙個非常重要的字尾自動機性質一定要明確,字尾自動機乙個點的par一定是這個點代表的所有字元子串的公共字尾。了解了這一點,我們便可以構造字尾自動機,然後進行匹配。在匹配的過程中,如果可以成功轉移,直接轉移並且把記錄的長度 就...