CodeForces - 1335E2 Three Blocks Palindrome (hard version)(思维)
題目鏈接:點(diǎn)擊查看
題目大意:給出?three blocks palindrome 的定義,為 aa....aa + bb....bb + aa....aa 三個(gè)部分組成的字符串,其中第一段為 x ,第二段為 y ,第三段為 x ,x 和 y 的長度可以為 0 ,第一段和第三段必須完全一致,且某一段中的字符必須只有一種,換句話說,three blocks palindrome 只由至多兩種不同的字符組成,現(xiàn)在給出一個(gè)字符串 s ,可以挑選其子序列用來組成?three blocks palindrome ,求可以組成的最長?three blocks palindrome 是多長
題目分析:讀完題后,因?yàn)樽址N類比較小,所以考慮對于每個(gè)字符單獨(dú)維護(hù)一下前綴和,這樣就能O(1)求出某段區(qū)間內(nèi)某個(gè)字符出現(xiàn)的次數(shù),之后在沒看數(shù)據(jù)范圍的前提下,第一反應(yīng)是一層 for 枚舉 a ,一層 for 枚舉 b ,然后雙指針O( n )維護(hù)最大值,時(shí)間復(fù)雜度為 200 * 200 * n 看了數(shù)據(jù)范圍后,這樣的方法可以去水過 E1 ,而無法過 E2,考慮優(yōu)化,在外層枚舉 a 的時(shí)候,沒必要每次都O( n )遍歷所有字符,只需要枚舉字符 a 出現(xiàn)的位置就行了,內(nèi)層依然是一層 for 枚舉 b 維護(hù)最大值,這樣均攤下來時(shí)間復(fù)雜度為 200 * n ,就能過 E2 了,至于如何只枚舉字符 a 出現(xiàn)的位置呢?開一個(gè) vector 記錄一下每個(gè)字符的出現(xiàn)位置就好了
代碼:
?
?
總結(jié)
以上是生活随笔為你收集整理的CodeForces - 1335E2 Three Blocks Palindrome (hard version)(思维)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CodeForces - 1339E P
- 下一篇: CodeForces - 1335F R