POJ 3261 字尾陣列板子

2021-09-03 08:09:49 字數 610 閱讀 6486

題意:給你n個數字,要你找出出現超過k次子串的最長長度。

做法:字尾陣列的板題吧。因為聽說比較常用就先留個板子。東西還是比較好理解的。這個題也不是很難。有比較難的我晚點再理解。

總之就是用一段連續的**實現了對字尾串的排序。

#include#include#include#includetypedef long long ll;

using namespace std;

const int maxn=100010;

//以下為倍增演算法求字尾陣列

int wa[maxn],wb[maxn],wv[maxn],ws[maxn];

int cmp(int *r,int a,int b,int l)

/**< 傳入引數:str,sa,len+1,ascii_max+1 */

void da(const int r,int sa,int n,int m)

else now=1;

}return 0;

}int main()

else r=mid-1;

}printf("%d\n",ans);

return 0;

}

poj3261(字尾陣列)

題意 給出一串長度為n的字元,再給出乙個k值,要你求重複次數大於等於k次的最長子串長度.思路 其實也非常簡單,直接求出height值,然後將它分組,二分答案.結果就出來了.include include include includeusing namespace std define maxx 1...

字尾陣列板子

sa i j表示為按照從小到大排名為i的字尾 是以j 下標 開頭的字尾 rank i j 表示為按照從小到大排名 以i為下標開始的字尾 排名為j height陣列 定義height i suffix sa i 1 和suffix sa i 的最長公共字首 include include includ...

POJ POJ 3261 字尾陣列

可重疊的 k 次最長重複子串 給定乙個字串,求至少出現 k 次的最長重複子串,這 k 個子串可以重疊。演算法分析 這題的做法和上一題差不多,也是先二分答案,然後將字尾分成若干組。不 同的是,這裡要判斷的是有沒有乙個組的字尾個數不小於 k。如果有,那麼存在 k 個相同的子串滿足條件,否則不存在。這個做...