1. 程式人生 > 其它 >NOIP2021暴斃記

NOIP2021暴斃記

NOIP2021暴斃記(希望日後我不用把這個名字改成退役記)

考前

Day -1

開了 \(3000\times 3000\) 個 map MLE 了

Day 0

T4 最後特判了一手然後 CE 了。

屬於是 每天一個新錯誤

Day 1

看了一遍題,感覺前兩題還行,T3 跟之前聯考的一道題有類似的結論,T4 的超長題面讓我第一眼以為它是大模擬,4s 1G 的時空限制讓我感覺它非常不可做。

T1

感覺可以判每個數裡是否有 \(7\) 之後直接篩,但是感覺判 \(7\) 需要 \(6\times 10^7\) 次除法和取模,以為跑不太動。想了 \(5\) 分鐘沒有更好的辦法了,打算寫一個試一下,然後發現跑的飛快,輕鬆過掉。測了一下極限資料發現輸出太慢了,加了一個輸出優化。花了可能 \(20\)

分鐘。

T2

popcount 讓我想到了之前 NOI 聯訓的一個 \(O(2^{\log_2 n})=O(n)\) 的東西,然後先考慮有序的 \(a\) 有多少種,然後轉移的時候列舉 \(x\) 選了 \(k\) 個,乘上一個 \(\frac{1}{k!}\),最後乘上一個 \(n!\) 即可。記 \(f_{i,s,j,k}\) 表示考慮了 \(v_{0\sim i}\),所選的所有數的 \(\lfloor\frac{S}{2^i}\rfloor\)\(s\),後 \(i\) 位剩下 \(j\)\(1\),選了 \(k\) 個數的方案數。狀態數 \(O(n^3m)\),轉移 \(O(n)\)

,時間複雜度 \(O(n^4m)\)。看著可能比較滿,而實際上非常跑不滿,沒怎麼調就過了樣例。

至此花了一個小時。

T3

在考試進行了大概 1 個多小時之後,機房裡十分寂靜,幾乎沒有打鍵盤的聲音,再加上這個看著要資料點分治的資料範圍,感覺 T3 可能比較困難,有了一定的心裡準備。

想直接對著這個操作找找有什麼性質,完全沒有發現任何性質。想到了之前聯考結論:一次操作相當差分陣列交換,但是憨憨的我以為這個性質沒有用,完全沒有往這個方向想。

又想到可以模擬退火,感覺正確率也許還不錯,但是好久沒有寫過模擬退火了,不敢確定能否寫對。

於是就先打了一個 DFS 暴力,嘗試找點規律,發現中間的數比較接近,不過也沒有別的進展。然後去看了看 T4,感覺很陰間,不過部分分比較多。

寫完了模擬退火之後發現幾乎完全退不動,也就比 DFS 多拿了 12 分,經過調參也沒什麼用。

考後發現,差分陣列先單減後單增的結論我在DFS打表的時候已經大概看出來了,而且就算沒有看出來,直接對著差分陣列退火,也比我直接對著原序列的操作退火來的分多得多。

在 T3 上花了 2 個小時而毫無進展。

T4

還剩下一個半小時寫 T4 的各種暴力。

32分的暴力也不好寫,寫+調花了接近50分鐘。除錯的時候過不了第 \(3\) 個大樣例,我為了方便除錯就在跑完了第一組資料之後直接 return 0 了,最後調出來之後也過了第 \(3\) 個大樣例,不過不知道為什麼這句 return 0 最後沒有刪掉也沒有註釋掉,直接暴斃。(我在考試即將結束的時候還測了第一個樣例,而第一個樣例恰好只有一組資料……)

然後嘗試 rush 了一個沒有 \(3\) 型別的邊的部分分,可以使用set簡單維護,不過寫完了沒有時間調了,不過雖然沒有過沒有 \(3\) 型別的邊的部分分,這個東西能過只有型別 \(1,2\) 的部分分,拿到了 \(8\ pts\),避免了我因為上面的 return 0 錯誤而 T4 爆零。

最後只剩下 5 分鐘檢查了,虛擬機器開啟得太慢了,沒有時間了。

考後

T3 的模擬退火實在是太劣質了,民間資料的分數在 \(24\ pts\sim 32\ pts\) 之間浮動。

T3 直接在原序列上做行不通的話一定要及時轉化思路,避免定勢思維。在時間緊張的情況下還是應該以檢查為重,避免為了 \(8​\) 分而丟掉 \(24​\) 分的情況。

還有 4 個月的時間就是省選了,難度有所提升,需要儘快適應,把一些平時用的較少的一些知識點多鞏固練習一下,數論、字串方面的一些知識還不夠熟練,DP等一些思維題要多練多思考,可以去 CF/Atcoder 上找一找這種思維題。