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