CSP-S2024 遊記

DengStar發表於2024-10-27

CSP-S2024 遊記

Day \(-\infty\)

比賽前停課了兩週,大部分時候都待在海南熱帶海洋學院的圖書館。開始的一兩天還比較自律,後來一天比一天擺了。

賽前的幾天 vp 了一次 CSP2021(聽上去有點搞笑,但我確實沒有做過這些題),發現 T1 只會暴力,心瞬間涼了。一想到幾天後我就要參加最後一次 CSP,而我還是這麼菜,要掉小珍珠了。稍微平復了一下心情開了 T2,想到了一個 dp,沒怎麼想清楚細節就直接開碼了。碼完後發現連樣例 1 都過不了,縫縫補補了半天才總算過了,當看到輸出和 ans 一樣時可以說是如釋重負。但最後模擬賽的結果也不甚理想。

這場模擬賽讓我對自己的參賽狀態感到極大的不自信:我發現自己的思維能力極弱,CSP2021 的 T1 和 T3 都算是比較簡單的題,只需要一點靈光(特別是 T1,我看了題解之後感覺恍然大悟,但自己就是做不出來)。如果今年的 CSP 也在 T1 放這種需要靈光乍現的題目,而我不幸沒能對上出題人的腦電波,那我不是完了?並且在這幾天的訓練中我發現考試時能否做出 T1 對我的心態影響極大。如果快速地做出了 T1,手上有分了,心裡就不慌;如果想了半天還是隻會暴力,心態就會一崩到底,後面的三道題也會徹底寄掉。想到這裡,腦中已經把自己 T1 不會做,然後全場只有暴力分的壞結局給預演完了😅雖然在海南 CSP 只要不爆零就可以進 NOIP,但學了這麼久,要是真的發揮成這樣,然後感謝海南省的平均水平讓我過線,真的可以跳樓了😅😅😅

事已至此,只能期望 CCF 多整點簡單題,讓我多水一些分

Day \(1\)

對待最後一場 CSP,還是得放尊重點。早早從家裡出發,在海中旁買了瓶冰紅茶和一包奧利奧,以免考試時餓到自己。然後發現來的實在有點太早了,在海中的走廊上對著幾棵搖來搖去的樹看了幾十分鐘才進場。

(PS:最近颱風要來了,那幾棵樹的樹幹都很細,在風中晃來晃去,感覺都要斷了)

進機房時才兩點,還有半小時才開考,這些時間足夠我把預設源打好,然後稍微配置了一下我習慣用的 Sublime。打程式碼時發現心中還是難掩緊張,手感覺有點發軟。

開考後,對著 T1 沉思了 10 分鐘。一開始以為是要求最多能把序列劃分成多少個最長上升子序列,這不是 導彈攔截 嗎?但又發現不對勁:這題中的序列可以隨意排序。進一步思考,突然感覺對上出題人的腦電波了:只需找到眾數的出現次數就好,感覺挺正確的。程式碼超級好寫,寫完馬上過了所有樣例,此時才過去了 15 分鐘,夢幻開局!這 15 分鐘拿的分數已經和去年一樣高了 賽前祈禱 CCF 放點簡單題,沒想到它真放啊,還這麼簡單,開始時的緊張情緒已經消除了大半。

順序做題,繼續看 T2。題面很長,細節似乎有點多,但感覺很可做。第一個詢問是好做的:對於加速度非負的車輛,在最後一個測速儀判斷其是否超速;否則在它進入主幹道以後的第一個測速儀判斷其是否超速,這可以用二分查詢。於是快速碼了這一部分的程式碼,肉眼比對了一下,應該是過了所有樣例(只看輸出的第一個整數)。回頭繼續想第二個詢問。顯然對於每輛車,如果它超速了,能測出它超速的測速儀形成一個連續的區間,這是容易預處理的。之後怎麼計算最少要留下多少測速儀呢?很快想到一個貪心:按順序列舉每個位置,如果它是某個區間的右端點,並且這個區間內還沒有任何測速儀,那麼這個位置必須要有測速儀。(好吧我忘了我是列舉位置還是列舉測速儀了,現在看似乎列舉測速儀就可以,但我怎麼記得我列舉了位置?想起來了,我是列舉了位置,感覺有點傻)而判斷區間內是否有測速儀可以用樹狀陣列。這樣,單組資料的時間複雜度是 \(O(L + m \log L)\)。程式碼實現的細節有點多,但我居然沒有遇到什麼困難,稍微除錯了一下就過了所有樣例,並且最大的樣例只跑了 0.58s,時限有 2s,非常穩。此時才過去一個半小時,我已經手握 200 分了,再也不用慌了。

剩下的時間就打得特別拉跨了。看了 T3,隱約感覺可以 dp。然後想到了一個狀態設計:設 \(f(i)\) 表示 \(i\) 染成紅色時,前 \(i\) 個數字的最大得分。根據這個狀態設計可以得到一個 \(O(n)\) 的轉移:\(f(i) = \max_{0 \le j < i}\{f(j) + val(j + 1, i)\}\),其中 \(val(j + 1, i)\) 表示 \([j + 1, i]\) 染成同色時的貢獻。\(val\) 可以預處理,這樣總時間複雜度是 \(O(n^2)\),寫完就有 50 分,而且我感覺很有繼續最佳化的潛力。這時我彷彿已經看到 300 分在向我招手了,哐哐開寫。寫完發現樣例 1 都過不了,憤怒地檢查後發現做法假完了:沒有考慮到 \([j + 1, i]\) 中藍色點與 \([1, j - 1]\) 中藍色點的貢獻。思考了半天之後嘗試給這個做法打個補丁:設 \(f(i, j)\) 表示 \(i\) 染成紅色,且 \(j\)\([1, i]\) 中最後一個藍色點時,前 \(i\) 個數字的最大得分。照著這個思路,我發現轉移的總時間複雜度居然是 \(O(n^4)\),和 \(O(2^n)\) 的暴力一樣只能過第一個 Subtask,而且細節特別多,完全沒有前途,徹底怒了。於是打完暴力之後跑路,去看 T4。

T4 更是閱讀理解題。看完這一坨題面之後,研究了半天,發現 A 性質是容易的:由於沒有新引入的參賽者,每一局的勝者都是確定的。那麼只要把比賽的樹形結構建出來,dfs 一遍,就可以做到 \(O(n)\) 預處理和 \(O(1)\) 查詢。B 性質似乎也是容易的,冠軍也是唯一確定的。哐哐開寫,結果,媽的,沒寫出來。這東西的細節比我想象的要多,一直因為某些神秘原因 RE,最後也沒搞懂為什麼,爆零辣!

總結:雖然還是有些遺憾(T4 的部分分沒寫出來),但比起之前已經進步很多了。作為新賽季的第一場比賽,算是開了個好頭,希望 NOIP 能發揮得更好。其實能考 200+(如果不掛分的話) 多少還是有點運氣成分,我的思維能力較弱,但本場比賽的 T1 我很快想出來了,T2 也沒什麼思維難度,算是比較適合我的題。NOIP 可不能把希望都寄託在運氣上,還是得多練,特別是鍛鍊思維能力。

一些疑問:220 在海南能排到第幾?

題外話:

  1. 發現 T3 可以設 \(f(i)\) 表示 \(i\)\(i - 1\) 異色時的最大分數,這和我的狀態設計簡直就是一步之遙,操!賽前寫了這麼多 dp,賽時還是隻會打暴力,我服了呀。
  2. 由於颱風影響,週六回不了三亞了,週日上午的票還沒了,買了下午的票,其中有一半時間我得站著,這下樂了。不過正好可以找個藉口晚上不回學校。