許可權題。。。
只有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解決,子串要求連續。字尾陣列可以...