許可權題。。。
只有cjoj題面啦
給出幾個由小寫字母構成的單詞,求它們最長的公共子串的長度。
任務:
讀入單詞,計算最長公共子串的長度
第一行是整數 n,1<=n<=5,表示單詞的數量。
接下來n行每行乙個單詞,只由小寫字母組成,單詞的長度至少為1,最大為2000。
僅一行,乙個整數,最長公共子串的長度。
3 abcb
bca
acbc
求若干個串的最長公共子串
首先把所有串用一些奇怪的符號連線在一起
然後求出字尾陣列
每次二分乙個答案
在連續的一段滿足條件的he
ight
值中 如果所有串都至少出現了一次則證明是可行的
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
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)
}return
false;
}int main()
a[++n]=26+tt;
}getsa();
int l=1,r=n,ans=0;
while(l<=r)
printf("%d\n",ans);
return
0;}
BZOJ2946 公共串(字尾陣列)
許可權題。只有cjoj題面啦 給出幾個由小寫字母構成的單詞,求它們最長的公共子串的長度。任務 讀入單詞,計算最長公共子串的長度 第一行是整數 n,1 n 5,表示單詞的數量。接下來n行每行乙個單詞,只由小寫字母組成,單詞的長度至少為1,最大為2000。僅一行,乙個整數,最長公共子串的長度。3abcb...
pku 3415 字尾陣列,公共子串統計
給定兩個字串,要求相同子串的個數,其中字串開始的位置不同則為不同的子串。思路 第一肯定是想到的字尾陣列,求得的是high陣列,那麼這只是排列臨近的的字尾的最長公共字首,為了求總的個數,我們可以對high陣列進行分段求得,就是從1到n列舉最長公共字首的長度,然後進行分段,要注意相同的子串必須屬於不同的...
字尾陣列處理多字串公共子串總結
關於字尾陣列的學習可以參考 字尾陣列學習小記 模板 whyorwhnt的專欄 個人經驗 對單個字串問題求個數需要列舉,求長度可以利用二分 公共子串 如果字串l同時出現在字串a和字串b中,則稱字串l是字串a和字串b的公共子串。與子串行不同的是,子串行可以斷續,通常用dp解決,子串要求連續。字尾陣列可以...