2020 01 15日常總結

2021-10-02 05:23:59 字數 1505 閱讀 2892

【例題

】:

\color

【例題】

: 給出乙個只由小寫英文本元a,b,c...y,z組成的字串s

ss,求s

ss中最長回文串的長度(見洛谷p3805)。

【 思路

】:

\color

【思路】

: 我們先考慮暴力演算法:列舉乙個回文中心,然後向兩邊擴充套件。

這樣做有兩個問題:一是需要區分奇數和偶數。比如abaabba,我們肉眼一看就知道兩個都是回文,但是對於偶數回文串而言,它們的回文中心不是乙個可見字元(比如abba的回文中心在兩個b之間)。二是時間複雜度太高。列舉的時間複雜度為o(∣

s∣

)o(|s|)

o(∣s∣)

(∣ s∣

|s|∣s

∣表示字串s

ss的長度)。而拓展的時間複雜度最壞為o(∣

s∣

)o(|s|)

o(∣s∣)

,總的時間複雜度為o(∣

s∣2)

o(|s|^2)

o(∣s∣2

)。m an

ache

r演算法(

中文名:

馬拉車算

法)

\color

manach

er演算法

(中文名

:馬拉車

演算法),是解決此問題的o(∣

s∣

)o(|s|)

o(∣s∣)

演算法。首先,為了統一奇偶情況,我們在每個字元之間加上乙個沒有在s

ss**現的字元(比如aba變成$a$b$a$)。

記p [i

]p[i]

p[i]

表示以第i

ii個字元為回文中心的最長回文半徑,r

rr為最長回文右邊界,mid

midmi

d為最長回文右邊界中心,i

ii表示當前求解p[i

]p[i]

p[i]

。考慮如何求p

pp陣列,求解有好幾種情況: 【程式碼

】:

\color

【程式碼】

const

int n=

11001000

;char s[n]

,s1[n<<1]

;int p[n<<1]

,ans,n;

inline

void

manacher()

}inline

void

calc_answer()

}int

main()

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...

2019 10 01日常總結

前言 今天是祖國母親70歲生日,請允許我向祖國母親說一聲 生日快樂!願您永遠繁榮昌盛 山清水秀!題意 松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n nn個房間,並且有n 1 n 1n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請...