CSP2023&NOIP2023遊記

max0810發表於2024-07-29

CSP(10.21)

早上8:30開考,根據以往的經驗,去考場去早了也只能白等著,所以這次差不多8:10才進考場(指的是進學校大門),到的時候發現我們機房的幾個同學都先走了。

先是普及組,希望拿個400,還是比較有信心的。

J組

8:30開始考試。先看了一下四道題,前三道都是直接看出了思路,T4感覺有點難度,到時候可能會想一下(但是很慶幸最難的題不是模擬,這讓我覺得AK的機率提高了很多)。

先看T1,發現就是一個迴圈,花了幾分鐘切了(這裡就不得不說一下我考試的時候對面是一個xxs,一直不遵守紀律,工作人員也是提醒了幾次都不聽,生活中有這種人真的令人無法忍受)。

然後看了下T2,T2不知道是不是以前做過,反正就覺得是貪心(每次走向下一個油費比自己小的點),然後隨便證明了一下,就開始寫了。寫完的時候大概是9:20。

T3是一箇中等難度模擬,反正就一直寫,寫了大概20分鐘,然後調錯又調了個10分鐘,這時候差不多是9:50。

最後一道T4,結合資料範圍想了一下,發現是一個 \(nk\) 個點的 \(SPFA\),於是就花了大概30分鐘寫完了,結果T4並沒有想象中的那麼難。過完大樣例,看了一眼時間,是10:25,還有足足一個半小時。

接著檢查了一下四道題,然後看到T2有一個地方可能會掛,就是如果一個點剩的油已經夠走到下一個點了,這時候就不用再買了。如果直接用樸素的向上取整的寫法會變成 \(1\),所以得特判一下(估分時好像@X2H_tato和@anr_uli都因為這個掛成了 \(15\) 分)。

檢查了四道題,這個時候還有一個小時,然後就玩了一會兒金山打字通(

普及組估分 \(100+100+100+100=400\),實際得分 \(100+100+100+100=400\)


中午睡了個午覺,下午繼續打提高組,提高組希望拿個300+。

S組

2:30開始,通讀了一下四道題,覺得難度比較正常,覺得應該可以有300分。

先看了下T1,T1就是個暴力,直接列舉 \(1-1e5\) 即可。

然後是T2,T2這種可以兩兩消除的字串在暑假集訓的時候做過類似的,具體可以看QOJ6504 Flower‘s Land 2 題解。做法就是用矩陣,因為矩陣滿足結合律但不滿足交換律。於是我寫了一會兒就寫完了。雖然我考場上思路一下就想出來了,但是在第一次做這種題時我是完全沒有想到可以用矩陣,所以在我覺得考場上遇到T2肯定是賺了。寫完兩道題的時候大概過去了40分鐘。(考完後發現有一個寫法巨簡單的 \(\mathcal{O}(26n)\) 的做法,我還在那寫我認為很優秀實際上程式碼又長,常數又大的做法艹)

看了下T3,是個大模擬,就覺得可以先放一下,所以就看了下T4。T4想了十多分鐘,想到了是先二分答案,然後題目就轉化為了求一個dfn序,使每個點的dfn都不大於一個數。我先是想到了一個貪心做法,感覺比較正確,然後就開始寫了。

寫了大概30分鐘,突然想到有可能一棵子樹走一半再去走另一顆子樹,所以貪心就被假掉了,然後又去想了一會兒正解,沒有想出來。於是就想把T4先放一下,先寫T3,寫完之後可以用貪心再寫一下T4,覺得CCF資料應該很水說不定能多得好多分

T3想到了用兩種結構體分別來表示每一種結構體型別和變數,操作3就依次訪問,操作4就遞迴。然後就一直寫寫寫,最後寫+呼叫了將近2h,弄完之後還剩大概20分鐘。

到最後,本來想衝一下T4,但是感覺有一點麻煩,然後就保守一點選擇了檢查前三題。看到第二題感覺map過不了 \(2e6\),然後就把矩陣對映到了一個 \(long long\) 上面,於是就能用unordered_map維護了。

全部看完之後還剩十分鐘左右,然後就在電腦上到處亂點,甚至亂刪了幾個登錄檔(

提高組估分 \(100+100+100+0=300\),實際得分 \(100+100+100+0=300\)


總結

這次考試總體來說發揮的不錯,仍需加強的還是思維能力,像T4這種想了很久沒想出來比較遺憾。還有時間一定要分配好,這次要不是及時發現了T4的思路假了,估計還要寫一會兒,到時候可能T3都寫不出來了。

值得一提的是,這次比賽想試一下全程用Linux寫,最後發現效果還挺好 (比垃圾Dev好多了)

第二天知道了S組T2居然是原題CCF你是真nb啊

\(\texttt{Updated on 10.29}\):出成績了,最後T2居然不會因為沒寫那個特判掛分???CCF資料是拿腳造的實錘了!

NOIP(11.18)

這次的考點在七中高新,和考CSP的時候差不多,也是卡點進的考場。

8:30準時發的密碼。先花1分鐘掃了一下四道題,發現T1是個簽到題,然後就先開始寫了。做法就是求出每個字串能弄出來的最小和最大的字典序,然後比較一下就行了,寫T1大概花了30min。

接著仔細地讀了一下剩下的三道題,題意都還是比較易懂的,然後就決定先開始想T2。T2可以先模擬每次賦值,最後每個變數要麼等於一個確定的值,要麼等於另一個變數的初值(或初值取反的值)。然後就可以用並查集維護,如果是 \(a_i=a_j\) 就將 \(i\)\(j\) 合併,如果是 \(a_i=\neg a_j\) 就將 \(i\)\(j\) 看成敵人,有點類似於關押罪犯的做法。最後如果有兩個敵人在一個並查集裡,或者並查集中某一個是 \(U\),那麼這個並查集就一定全是 \(U\),所有的這種 \(siz\) 加起來就行了。想+寫完T2大概是10:30。

然後看了一眼T3,想到了很明顯的35分暴力,接著想最佳化。當時也不知道怎麼想的,我把它看成一個01矩陣,\((i,j) = a_i>b_j\),然後看能不能從 \((1,1)\) 走到 \((n,m)\),做法是對的,但是很難最佳化(我也不知道我當時是腦子抽了還是啥,能想出這個思路)。於是我就一直想了30min,然後放棄了,準備去想T4。

T4也是立馬想出了36分 \(\mathcal{O}(n^2)\) 的做法,但是我是二維dp,\(f[i][j]\) 表示現在是第 \(i\) 天,已經連續跑了 \(j\) 天的最高能量值,而不是用 \(f[i]\) 表示第 \(i\) 天不跑的最大值。然後就跟T3一樣,一直想最佳化。最後到11:30,決定先把兩個暴力寫了再說。

然後就寫了30min的暴力,寫完後又檢查了一下T1T2,最後感覺想不出來了,就擺了一會兒(

出了考場後,發現機房人均300+,大家一致認為今年NOIP比去年簡單。最後一道題就是個線段樹最佳化dp的板子,T3也有很簡單的75分暴力,所以300分應該是比較好拿的。

NOIP估分:\(100+100+35+36=271\)

實際:\(100+100+35+44=279\)

upd on 11.27:T4部分分把全部貢獻大於0的加起來,居然得了8分??


這是我初中生涯最後的一次NOIP,感覺發揮的不是很好。現在正在全力以赴備戰省選,希望能拿個好成績吧!

最後,如果有想看程式碼的點這裡