「 遊記 」CSP-S 2021
CSP-S 2021 比賽時間 \(2021.10.23 - 14:30 \sim 18:30\)
賽時
\(14:30 \sim 14:40\)
\(10 \min\) 粗略地看了一下所有題目,感覺每道題都只能打暴力
\(14:40 \sim 14:55\)
\(15 \min\) 根據小樣例完成 \(T1\) 暴力的除錯,成功通過大樣例(\(\mathrm{airport3.in}\))
只不過暴力是 \(O(n^2 \log n)\) 的,感覺會被卡掉
\(14:55 \sim 15:30\)
想了 \(35 \min\) 的 \(T1\) 正解,什麼都沒想出來(根據複雜度只想了 二分,二分套二分,或許正解都不是這些演算法吧)
\(15:30 \sim 15:50\)
再次讀完題後感覺是 區間 \(dp\) (因為 \(n \leq 500\),又因為括號序列一般都是用 區間 \(dp\) 處理),於是順著思路打了 \(T2\) 的 \(dp\)
打到中途發現推的式子好像是錯的,於是直接跳過了
\(15:50 \sim 16:25\)
想了 \(10 \min\) 左右,有思路了,但是之間一個步驟沒得到證明,所以無解的情況會跟暴力一樣 \(L\) 和 \(R\) 都會跑一次,不過時間複雜度是由資料決定的,有解是 \(O(n)\),無解最壞是 \(O(2^n)\),但是除錯過了大樣例
\(16:25 \sim 17:00\)
思考了 \(5 \min\)
\(17:00 \sim 17:50\)
回去想 \(T2\),又思考了 \(10 \min\),感覺可以 \(dp\) 了,分成了 ***
,(...)
,(...)(...)(...)
,***(...)(...)
,(...)(...)***
\(5\) 種情況 \(dp\) 轉移,最後調過了大樣例
特殊說明:中途有一次樣例 \(2\) 輸出 \(22\):是因為 ()*()()
這種情況算了 \(2\) 次;當時試探性地改了一個轉移的變數,沒想到就過了,後面也發現是算重了,或許能過也是偶然吧
\(17:50 \sim 18:10\)
再次思考 \(T1\),真的想不出來怎麼做了
\(18:10 \sim 18:20\)
檢查了一下 freopen
,變數名,再次測試了一遍每道題的所有大小樣例
\(18:20 \sim 18:30\)
感覺也打不出什麼了,重複檢查程式碼等待考試結束
賽後
T1 廊橋分配
純粹的暴力,沒有什麼說的
洛谷自測: \(40\)(正常)
\(\mathrm{Hydro \ OJ}\) 測試: \(60\)(資料問題)
T2 括號序列
應該是正解 \(dp\),也沒有什麼說的
洛谷自測: \(100\)
\(\mathrm{Hydro \ OJ}\) 測試: \(100\)
T3 迴文
發現了一個致命錯誤:輸出的字串沒有初始化,為了簡單打輸出,就沒有用 for
,直接用了 %s
,但是我沒有清空字串,如果多組輸入出現 \(n\) 遞減,我就會 WA,因為答案會輸出之前殘留的字元
至於為什麼能過大樣例,因為大樣例的 \(n\) 全都是 \(20\)(以後不能相信大樣例)
洛谷自測: \(8\)(可憐,聽說暴力也能過洛谷的資料)
\(\mathrm{Hydro \ OJ}\) 測試: \(48\)(資料問題)
T4 交通規劃
隨機染色也算暴力吧,還是沒有什麼說的(為什麼一個點都過不了啊,還不如打暴力呢)
洛谷自測: \(0\)(可憐)
\(\mathrm{Hydro \ OJ}\) 測試: \(0\)(可憐)
自我評價
\(T1\) 其實是想到了正解的,即考慮每次多一個廊橋的貢獻,我以為每次都要全部遍歷一遍就是 \(n^2\) 的,所以就沒有打(奇怪的是,\(O(n^2)\) 也比 暴力的 \(O(n^2 \log n)\) 更優,我為什麼不打 \(n^2\) 呢)
其實之前已經在廊橋裡面的飛機可以不遍歷的,可以用個數據結構維護,每個飛機只會遍歷一次,所以是 \(O(n \times \log n)\)(看資料結構的複雜度咯,set
是 \(O(\log n)\) 的)
\(T3\) 再思考一下說不定就能打出正解了(程式碼裡其實把一個 if
改成 else if
就是正解了),不應該犯 沒初始化 這樣的錯誤
整場比賽可能是因為 \(T1\) 還沒做出來,想做出 \(T1\)(因為 \(T1\) 一般都比較簡單),所以沒有把時間留給對拍(如果對拍了,說不定就不會出現這樣的錯誤了)
自我預測: \(140 \sim 250\) 不等,高分可能性有點小(也不算極低,看 CCF 的資料咯)
洛谷自測: \(40 + 100 + 8 + 0 = 148\)
\(\mathrm{Hydro \ OJ}\) 測試: \(60 + 100 + 48 + 0 = 208\)