題意:求兩串字元(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段 可以重疊 那最值就是這兩段的最...