POJ 2217 Secretary 字尾陣列

2021-06-22 13:41:48 字數 895 閱讀 6208

題目大意:

計算兩個字串的最長的公共字串字串的長度。

思路分析:

將兩個串合併起來。

然後直接跑字尾陣列求出height

然後就可以直接掃瞄一次height ,加個是不是在乙個串中的判斷就可以了。

#include #include #include #include #define maxn 200005

using namespace std;

char str[maxn];

int sa[maxn],t1[maxn],t2[maxn],c[maxn],n;

void suffix(int m)

}int rank[maxn],height[maxn];

void getheight()

return false;

}int bin()

else r=mid-1;

}return ans;

}char tmp[11111];

int main()

{ int t;

scanf("%d",&t);

getchar();

while(t--)

{gets(tmp);

int len=strlen(tmp);

int top=0;

for(int i=0;i<=len;i++)

str[top++]=tmp[i];

gets(tmp);

int cnt=0;

while(tmp[cnt]!='\0')str[top++]=tmp[cnt++];

n=top;

suffix(256);

getheight();

int ans=0;

for(int i=1;i

字尾陣列 POJ 2217 Secretary

題目鏈結 題意 求兩個字串的最長公共子串 分析 做法是構造新的串是兩個串連線而成,中間用沒有出現的字元隔開 因為這樣才能保證s的字尾的公共字首不會跨出乙個原有串的範圍 即news s t。對其求sa陣列和height陣列,取最小值的height i 且兩個字尾串屬於不同的字串。include inc...

POJ 2217 字尾陣列 最長公共子串

題目鏈結 題目大意 求兩個串的最長公共子串,注意子串是連續的,而子串行可以不連續。解題思路 字尾陣列解法是這類問題的模板解法。對於n個串的最長公共子串,這要把這些串連在一起,中間用 這類的特殊符號分隔一下。先求字尾陣列,再求最長公共字首,取相鄰兩個且屬於不同串的sa的最大lcp即可。原理就是 這樣把...

poj2117求割點後最多的塊。

tarjan演算法,列舉割點 注意此題無向圖可能不連通 每個割點分割後最大塊數 連通分量 1即可。開始老是tle,後來比較了他人 只在vector.用全域性變數即可,用區域性tle。記住教訓。include 600 ms 5000ms include include 用這個做鍊錶,儲存邊,方便。in...