BZOJ2946 公共串(字尾陣列)

2022-03-20 08:02:19 字數 910 閱讀 7542

許可權題。。。

只有cjoj題面啦

給出幾個由小寫字母構成的單詞,求它們最長的公共子串的長度。

任務:讀入單詞,計算最長公共子串的長度

第一行是整數 n,1<=n<=5,表示單詞的數量。

接下來n行每行乙個單詞,只由小寫字母組成,單詞的長度至少為1,最大為2000。

僅一行,乙個整數,最長公共子串的長度。

3abcb

bcaacbc

求若干個串的最長公共子串

首先把所有串用一些奇怪的符號連線在一起

然後求出字尾陣列

每次二分乙個答案

在連續的一段滿足條件的\(height\)值中

如果所有串都至少出現了一次則證明是可行的

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define max 200000

int n,t;

int sa[max],rk[max],t[max],x[max],y[max];

int height[max],b[max],a[max];

char s[max];

bool cmp(int i,int j,int k)

void getsa()

for(int i=1;i<=n;++i)rk[sa[i]]=i;

for(int i=1,j=0;i<=n;++i) }

int vis[max],tot;

bool check(int k)

printf("%d\n",ans);

return 0;

}

BZOJ2946 公共串(字尾陣列)

許可權題。只有cjoj題面啦 給出幾個由小寫字母構成的單詞,求它們最長的公共子串的長度。任務 讀入單詞,計算最長公共子串的長度 第一行是整數 n,1 n 5,表示單詞的數量。接下來n行每行乙個單詞,只由小寫字母組成,單詞的長度至少為1,最大為2000。僅一行,乙個整數,最長公共子串的長度。3 abc...

pku 3415 字尾陣列,公共子串統計

給定兩個字串,要求相同子串的個數,其中字串開始的位置不同則為不同的子串。思路 第一肯定是想到的字尾陣列,求得的是high陣列,那麼這只是排列臨近的的字尾的最長公共字首,為了求總的個數,我們可以對high陣列進行分段求得,就是從1到n列舉最長公共字首的長度,然後進行分段,要注意相同的子串必須屬於不同的...

字尾陣列處理多字串公共子串總結

關於字尾陣列的學習可以參考 字尾陣列學習小記 模板 whyorwhnt的專欄 個人經驗 對單個字串問題求個數需要列舉,求長度可以利用二分 公共子串 如果字串l同時出現在字串a和字串b中,則稱字串l是字串a和字串b的公共子串。與子串行不同的是,子串行可以斷續,通常用dp解決,子串要求連續。字尾陣列可以...