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