題意:給出一串字元,需要求這串字元中的最長重複子串,要是有多個,輸出字典序最小的.........
我自己的一些想法:這個思路我一開始倒是沒有看明白,慢慢的編下去,才懂了它到底是如何操作的......其實就是列舉多少個字元會匹配,然後求出它們的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的串重...