POJ POJ 3261 字尾陣列

2021-10-04 15:50:52 字數 1303 閱讀 2804

可重疊的 k 次最長重複子串

給定乙個字串,求至少出現 k 次的最長重複子串,這 k 個子串可以重疊。

演算法分析:

這題的做法和上一題差不多,也是先二分答案,然後將字尾分成若干組。不

同的是,這裡要判斷的是有沒有乙個組的字尾個數不小於 k。如果有,那麼存在 k 個相同的子串滿足條件,否則不存在。這個做法的時間複雜度為 o(nlogn)。

#include

#include

#include

#include

#define f(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))

#define g(x) ((x) < tb ? (x) * 3 + 1 : ((x) - tb) * 3 + 2)

#define ll long long

using

namespace std;

const

int n =3*

(1e6+5

);int wa[n]

, wb[n]

, wss[n]

, wv[n]

, sa[n]

;int rak[n]

, height[n]

, cal[n]

,n;char s[n]

,ans[n]

,s1[n]

;int cnt[n]

;intc0(

int*r,

int a,

int b)

intc12

(int k,

int*r,

int a,

int b)

void

rsort

(int

*r,int

*a,int

*b,int n,

int m)

void

dc3(

int*r,

int*sa,

int n,

int m)

void

calheight

(int

*r,int

*sa,

int n)

bool

check

(int k,

int x)

else}if

(ans>=x)

return1;

return0;

}int

main()

printf

("%d\n"

,l);

}

poj3261(字尾陣列)

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

POJ 3261 字尾陣列板子

題意 給你n個數字,要你找出出現超過k次子串的最長長度。做法 字尾陣列的板題吧。因為聽說比較常用就先留個板子。東西還是比較好理解的。這個題也不是很難。有比較難的我晚點再理解。總之就是用一段連續的 實現了對字尾串的排序。include include include includetypedef lo...

字尾樹 字尾陣列

在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...