考前
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 上找一找這種思維題。