poj1743 字尾陣列入門題

2021-09-19 12:25:49 字數 929 閱讀 9404

//poj1743

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

const int ding=2e4+5;

const int inf=0x3f3f3f3f;

int sa[ding],x[ding],y[ding],c[ding],r[ding],rank[ding],height[ding];

int n,m;

void get_sa()

int p=1;

for(k=1;k=k) y[p++]=sa[i]-k;//大於等於k

//sa是第一關鍵字的排名, 然後再根據第二關鍵字的排名來確定排名,

memset(c,0,sizeof(c));

for(i=0;i=0;i--) sa[--c[x[y[i]]]]=y[i];//重置sa陣列

memcpy(y,x,sizeof(x));

memset(x,0,sizeof(x));

p=1;//從1開始編號

x[sa[0]]=0;

//因為上面已經重置了x的值 所以下面是從1開始迴圈,然後是和前乙個比較sa[i]和sa[i-1] 比較

for(i=1;i=n)break; }}

void get_height()

else

}return 0;

}int main()

else r=mid-1;

} if(l>=4)printf("%d\n",l+1);

else printf("0\n"); }

return 0;

}

字尾陣列入門 poj1743

題意 給乙個陣列表示一段 範圍1 88 問為最長的的位置不相交的相似的旋律。相似的意思是,整段加上某個值,比如1 2 3 4 5 和 6 7 8 9 10是相似。題解 求出字尾陣列,高度陣列lcp,列舉答案x 找到乙個對於連續的lcp i x,找到看最小的sa i 最大的sa i 看是否差值大於l,...

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 字尾陣列

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