poj3693 字尾陣列

2022-04-28 15:18:10 字數 1001 閱讀 1448

題意:給出一串字元,需要求這串字元中的最長重複子串,要是有多個,輸出字典序最小的.........

我自己的一些想法:這個思路我一開始倒是沒有看明白,慢慢的編下去,才懂了它到底是如何操作的......其實就是列舉多少個字元會匹配,然後求出它們的height值,再用這個值去除以長度,得到有多少個迴圈........具體看**

#include#include#includeusing namespace std;

#define min(x,y) x>y? y:x

#define maxn 100010

int dp[maxn][33];

int wa[maxn],wb[maxn],wsf[maxn],wv[maxn],sa[maxn];

int rank[maxn],height[maxn],s[maxn];

char str[maxn];

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

void getsa(int *r,int *sa,int n,int m)

ll++;

while((1<

return min(dp[ll][k],dp[rr-(1<0)

else

if(rank[p]>rank[m])

}if(ansrank[p])

}} printf("case %d: ",++text);

// printf("%d %d %d\n",ans,pos,lenn);

if(ans<2) //這裡,如果字元總長度小於2,那麼就在原串中找出乙個最小的字元就好

for(int i=pos;i

printf("%c",str[i]);

printf("\n");

} return 0;

}

字尾陣列 poj 3693

題目 給出乙個串,求重複次數最多的連續重複子串 列舉長度為l,然後看長度為l的字串最多連續出現幾次。既然長度為l的串重複出現,那麼str 0 str l str 2 l 中肯定有兩個連續的出現在字串中。那麼就列舉連續的兩個,然後從這兩個字元前後匹配,看最多能匹配多遠。即以str i l str i ...

POJ 3693 字尾陣列

題意 首先定義了乙個字串的重複度。即乙個字串由乙個子串重複k次構成。那麼最大的k即是該字串的重複度。現在給定乙個長度為n的字串,求最大重複次數的子串,有多解時輸出字典序最小解。思路 與spoj的題意差不多,可以點選這裡看 說下字典序的問題,想記錄size 最大重複次數,把所有滿足條件的長度l都記錄起...

poj 3693 字尾陣列 RMQ

這道題是字尾陣列的乙個典型應用。求乙個串中連續重複次數最多的乙個子串。做這道題的時候要把握住,連續重複 和 次數最多這兩個關鍵,才能有突破。下面的思路是照搬大牛的 大神不要打我 在字尾陣列神文中有這題的題解。比較容易理解的部分就是列舉長度為l,然後看長度為l的字串最多連續出現幾次。既然長度為l的串重...