1. 程式人生 > 其它 >【遊記】NOIP2021

【遊記】NOIP2021

本來覺得沒什麼好寫的,但想來是最後一次參加 NOIP 了,還是留點紀念。

Day0

今年在外地考試,換了個環境有點不適應。

晚上在賓館大喊 lpf ak noip 可惜沒有人聽見。

Day1

8:10 分進的考場。先敲了個配置,然後趴桌上打了個盹。

8:30 發了試題,瞄了一眼發現 T4 是個 4s+1G 的題目,顯然是個毒瘤。

然後開 T1,有儒略曆的既視感,但看完題才發現大概是個普及組的題目。

接著看 T2,發現比 CSPS2 水多了,大概 CF 1900 的難度》?

然後看 T3,發現題面很短很清晰,簡單推了以下就是求 \(n\sum a_i^2 - (\sum a_i) ^2\)​​ 最小值​,並且這個操作顯然就是個套路,直接做差分然後鄰項交換即可,並且最優答案的差分陣列應該是先減再增。

返回去寫 T1、T2,然後一遍過了樣例,看了下時間現在才 9:20 感覺非常不真實,又肉眼檢查了一下還是沒有問題。

接著想 T3,最優化問題先想 DP。定義狀態 \(f_{i,j,k}\)​ 表示排序後前 \(i\) 個數,選了 \(j\) 個數放左邊,剩下的放右邊,和為 \(k\) 的最優值,發現轉移起來非常詭異,並不是很可做。

試著把式子拆成差分形式,大概是使 \(n\sum a_i^2 - \sum\limits_{i=1}\sum\limits_{j=1}(n-i+1)(n-j+1)b_ib_j\)​​ 最小,\(b\)​​ 為差分陣列。

前面一部分還是比較好算,後面一部分貌似可以將 \(i\)

\(j\) 拆開算。

最後 DP 還要加一個維度,複雜度直接 \(\mathcal{O}(N^4M)\)。好傢伙這複雜度直逼T2。

就這樣瞪了一個半小時還是沒有看出什麼問題。一看時間 11 點了決定還是先寫 T4,免得後兩題都抱零了落得 CSP 下場。

T4 題意有點長,讀完題發現暴力分就是個大模擬,然後開始碼。碼了半個小時終於能過第 \(1\) 個樣例,但非常詭異的是第二個樣例一直輸出 3 4 5 2 5 5 1

一直調到 12:10 才發現一個地方本來是 \(p,q\) 結果寫成 \(x,y\)。改了之後一發過了樣例 \(3\)。看了下發現 \(9\sim 11\) 的點可以被卡到 \(nmq\)

,但貌似可以 vector 記錄鏈然後二分。還有 \(19\sim 21\) 的點非常迷惑,不知道是不是給 \(nmq\) 的分。

試圖寫 vector,但是到了 12:30 還沒有寫出來,冷汗都出來。

決策一下還是寫 T3 比較划算,暴力分還是不少。顯然我們可以直接 \(2^n\) 列舉每個 \(b_i\) 是放左邊還是放右邊。寫到一半突然意識到我們將相同的 \(b_i\) 放到一起決策,然後直接搜尋剪枝。12:50 敲完並且過了三個樣例,測了下 \(n\le 100\) 發現跑的飛快。再測一下 \(n=400\) 發現 10s 都不出結果。果斷陣列開 \(100\)。賽後才知道 \(n\le 10^4\)​ 的點 \(b\) 中有一堆相同的點,搜尋剪枝跑的非常穩,虧死。

最後兩分鐘檢查檔案,結果發現 T2 中 fac[i] = fac[i - 1] * i 沒有開 long long,嚇出一身冷汗。

哈哈哈哈哈哈哈哈天不亡我。

下午拿到程式碼發現大家分都不高?也對就 JX 這小地方怎麼會內卷呢是吧/doge