URAL1297 Palindrome(字尾陣列)

2022-05-02 19:24:08 字數 979 閱讀 3458

求乙個串的最大回文字串。

可以用字尾陣列解決。

分別考慮奇數和偶數回文子串的情況,列舉原串s的每個位置i作為中間位置看其能向左右兩邊同時拓展都哪兒:把原串s反轉成s',拼接sas'(a為乙個特殊字元),最遠拓展的地方便可以通過lcp(suffix[i],suffix[i'])求得,i'為i對應在s『的位置。

另外題目要求第乙個出現的最長回文串,從左到右列舉中間位置得到的肯定就是出現最早的。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define maxn 2222 78

intwa[maxn],wb[maxn],wv[maxn],ws[maxn];

9int cmp(int *r,int a,int b,int

l)12

intsa[maxn],rank[maxn],height[maxn];

13void sa(int *r,int n,int

m)34

35for(int i=1; ii;

36int k=0;37

for(int i=0; i1; height[rank[i++]]=k)41}

4243

int st[12

][maxn];

44void st(int *a,int

n)51}52

} 53

int rmq(int a,int

b)59

60char

str[maxn];

61int

r[maxn];

62int

main()

78if(i && res<(rmq(rank[i],rank[n+n-i+1])<<1

))82}83

if(flag)else

91return0;

92 }

URAL1297 字尾陣列

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

URAL1297 Palindrome 字尾陣列

題意為求最長回文串。這個題也好做,我們就把輸入的字串str和他自己反向鏈結,然後求sa陣列和height陣列 最後遍歷字尾陣列,這個時候就要細心了,首先你要判斷sa i 1 sa i 是不是分別屬於兩個字串了,並且還有判斷是不是回文串的起點,記錄位置的變數初始化為0,就可以了 includeusin...

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