字尾陣列入門 poj1743

2022-05-13 17:55:20 字數 1206 閱讀 3171

題意:給乙個陣列表示一段**,範圍1~88;問為最長的的位置不相交的相似的旋律。相似的意思是,整段加上某個值,比如1 2 3 4 5 和 6 7 8 9 10是相似。

題解:求出字尾陣列,高度陣列lcp,列舉答案x ,找到乙個對於連續的lcp[i]>=x,找到看最小的sa[i],最大的sa[i],看是否差值大於l,就可以判斷是否重疊。

//

#include

#include#include

#include

#include

#include

#define pb push_back

#define ll long long

#define pi 3.14159265

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

#define ws wppp

#define eps 1e-7

using

namespace

std;

const

int n=2e4+5

;const

int mod=1e9+7

;int

a[n], s[n];

intsa[n], t[n], t2[n], c[n], n;

intran[n], height[n];

const

int inf=0x3fffffff

;void get_sa(int

m)

int k = 0

;

for(i = 0; i < n; i++) ran[sa[i]] =i;

for(i = 0; i < n; i++)

}bool judge(int

x)

else

}return

false;}

intmain()

s[n-1]=0

; get_sa(

200);

int l=0,r=n;

while(l<=r)

if(r>=4)printf("

%d\n

",r+1

);

else printf("

0\n"

); }

return0;

}

poj 1743 字尾陣列

字尾陣列,求不可重疊最長重複字串。include include include include include include define maxd 21000 using namespace std int r maxd rank maxd height maxd int sa maxd wa...

POJ 1743 字尾陣列

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

POJ 1743(字尾陣列)

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