ural1517字尾陣列

2022-04-28 15:18:11 字數 797 閱讀 9814

題意:求兩串字元(0————255)的最長公共字串

思路:先將兩個字元鏈結起來,中間用乙個不曾出現過的字元,然後直接求出height陣列,然後根據它的特性,求出最長的公共字串,當然這個最長公共字串的座標要符合乙個在第乙個串中,另乙個在另一串中....這個好處理,直接根據sa陣列特性,sa[i-1],sa[i]........可知

#include#include#includeusing namespace std;

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

#define maxn 300010

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],str1[maxn];

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

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

if(0<=sa[i]&&sa[i]//printf("%d\t",height[i]);

//if(height[i]==31)

//printf("%d %d %d\n",sa[i-1],sa[i],len);

} //maxx=height[0];

for(int i=pos;iprintf("%c",s[i]);

printf("\n");

} return 0;

}

ural1517字尾陣列

題意 求兩串字元 0 255 的最長公共字串 思路 先將兩個字元鏈結起來,中間用乙個不曾出現過的字元,然後直接求出height陣列,然後根據它的特性,求出最長的公共字串,當然這個最長公共字串的座標要符合乙個在第乙個串中,另乙個在另一串中.這個好處理,直接根據sa陣列特性,sa i 1 sa i 可知...

URAL1297 字尾陣列

題目意思 給你乙個字串,要你求出最長的回文子串 解題思路 把原串的反串加個原串後面,中間加個沒有出現過的字元 然後,原串中,下標i在反串中對應的位置為2 l i 如果求以i為對稱軸的回文串,我們求suffix i 和suffix 2 l i 的lcp 如果求以i和i 1為對稱軸的回文串,我們求suf...

ural1297 字尾陣列 RMQ

rmq即求區間 i,j 的最值。通過o nlogn 處理,o 1 給出答案。rmq主要是動態規劃來做。dp i j 表示從i開始的長為2 j的區間最值。那麼可以得到dp i j max dp i j 1 dp i 1 j 1 j 1 dp i j 這個區間可以分為2段 可以重疊 那最值就是這兩段的最...