poj 1743 字尾陣列

2021-06-22 22:40:26 字數 659 閱讀 1624

字尾陣列,求不可重疊最長重複字串。

#include#include#include#include#include#include#define maxd 21000

using namespace std;

int r[maxd], rank[maxd], height[maxd];

int sa[maxd], wa[maxd], wb[maxd], ws[maxd], wv[maxd];

//r陣列存放字元的值

int cmp(int *p, int x, int y, int l)

void da(int n, int m) //n為字串長度,m為字元的最大值

}void calheight(int n) //n為串的長度減一

/*****************以上都是字尾陣列模板,下面的是具體問題的處理。******************/

int note[maxd];

void input(int n)

else

}return 0;

}int bs(int l,int r) //二分查詢

return r;

}int main()

return 0;

}

POJ 1743 字尾陣列

這裡有一篇 總結了很多字尾陣列的用法,是 字尾陣列 處理字串的有力工具 羅穗騫 裡面又很多關於這個字尾陣列的具體用法,其中就包括這個不可重疊最長重複子串 這個題的意思就是求解不可重疊最長重複子串,但是這裡有乙個問題,他的串中也可以是相似的 每個數之間的差值相同的 那麼我們就可以利用這個差相同的性質,...

POJ 1743(字尾陣列)

給定乙個字串,求最長重複子串,這兩個子串不能重疊。演算法分析 這題比上一題稍複雜一點。先二分答案,把題目變成判定性問題 判斷是否 存在兩個長度為 k 的子串是相同的,且不重疊。解決這個問題的關鍵還是利用height 陣列。把排序後的字尾分成若干組,其中每組的字尾之間的 height 值都不小於 k。...

POJ 1743 字尾陣列

求滿足下列要求的最長子串 1.長度不小於5 2.出現兩次 子串整體加上某個值也算出現一次 3.兩次出現無重疊 難處理的是第二個要求 整體增加某個數也算出現一次 稍微思考一下便會得出 整體加上某個值後,相鄰數的差值是不變的 所以用乙個陣列r i 儲存mus i 1 與mus i 的差值 這裡要注意將差...