[CSP-S 2021] 迴文

Yorg發表於2024-10-07

演算法

暴力

容易發現雙指標可以找到每一個區間 \([L, R]\), 使得這個區間覆蓋 \(1\) ~ \(n\) 的每一個數, 也即區間外覆蓋 \(1\) ~ \(n\) 的每一個數, 這是 \(O(n)\)
考慮判斷

對於兩個數列 \(A\), \(B\)
顯然, 在 \(A\) 中先取出的要在 \(B\) 中最後取出, 所以把 \(A\) 壓入棧中, 判斷棧頂是否在 \(B\) 的兩端出現, 完事之後記錄一下

正解

發現瓶頸在 \(O(n)\) 找區間上
如果假設第一次取左端
那麼與之相對應唯一確定的一個數就必須最後一個取
於是分成兩段

於是易得

程式碼

??? 有時間補

總結

善於運用基礎資料結構

分析瓶頸之後想辦法最佳化