字尾陣列,求不可重疊最長重複字串。
#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 的差值 這裡要注意將差...