spoj LCS 字尾自動機

2021-07-14 21:37:36 字數 608 閱讀 3494

琦不會字尾自動機……

是以前太浪了……

所以所有東西都留到了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一定是這個點代表的所有字元子串的公共字尾。了解了這一點,我們便可以構造字尾自動機,然後進行匹配。在匹配的過程中,如果可以成功轉移,直接轉移並且把記錄的長度 就...