URAL1297 字尾陣列

2021-06-14 20:32:25 字數 681 閱讀 5877

題目意思:給你乙個字串,要你求出最長的回文子串

解題思路:

把原串的反串加個原串後面,中間加個沒有出現過的字元

然後,原串中,下標i在反串中對應的位置為2*l-i

如果求以i為對稱軸的回文串,我們求suffix(i)和suffix(2*l-i)的lcp

如果求以i和i+1為對稱軸的回文串,我們求suffix(i+1)和suffix(2*l-i)的lcp

**(這是我寫的直接查詢版的,最壞情況下的複雜度是n^2,以後有時間了再來寫rmq吧):

#include#include#includeusing namespace std;

const int maxn = 1010*2;

char str[maxn];

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

int c[maxn];

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

void cal_the_houzhui(char *r,int *sa,int n,int m)

void solve(int l)

if(str[i]==str[i+1])}}

int st = ans2-(ans-1)/2;

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

for(int i=0;i

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段 可以重疊 那最值就是這兩段的最...

ural1297字尾樹組 2

題意 給定乙個字串,輸出其最大回文子串 分析 可以用manacher很方便求解,也可以用字尾陣列。對字尾樹組而言,先中間設定乙個不存在的值,反向接到後面。rmq處理之後,每次對lcp i,n i 1 求以i為中心的奇數的回文串,lcp i,n i 求以i和i 1為中心的偶數回文串長度。include...

字尾陣列 最長回文字串 ural1297

題意 求一串字串的最長回文字串.思路 在原串後面加乙個獨一無二的字元,再把原串倒過來接在原串後面。這樣,要是有回文串的話,其必然有兩個字尾的字首相同這樣,我們就可以列舉以每個字元為 k 中心的回文串,再找到它倒過來後所對應的那個位置2 len sa k 找到排在這之間的最小height值,也就是這兩...