[DMY]2024 CSP-S 模擬賽 Day 18

Redamancy_Lydic發表於2024-10-19

今天打的雖然有遺憾,但是也在情理之中。

賽時

看了眼 T1,沒有別人的猶豫,第一眼就看到了 \(n\le 5000\),然後開始寫最短路。

算了一下 dijkstra 根本跑不滿,無需 deque 的 01bfs。

寫完以後大概 40min,改一下 longlong 就扔了。

賽後沒掛,100pts。

T2 一開始沒有思路,在紙上畫畫圖感覺可以線段樹搞。但是區間數字種類數我只會莫隊,再考慮到動態開點什麼的,沒有繼續下去這個思路。

考慮貪心。之前做過一道類似的題,賽後 liang 大佬說是遊蕩的奶牛。當時這道題是要讓最多的線段不交,模仿類似的方法,我們可以先把 \(a\) 按照右端點排序以後列舉去計算 \(b\) 的貢獻。我維護了三個指標,分別代表當前需要考慮的 \(a\) 的範圍,當前可以作為答案的候選 \(b\) 的範圍,以及當前(即上一次)選擇的最靠右的答案的右端點位置。

這樣排序過後可以把 \(b\) 左端點都比當前 \(a\) 右端點小的位置全都維護其右端點,插到一個 set 裡面。每次貪心的選擇當前候選答案中最大的右端點作為答案。

對於無解的情況,就是候選答案為空或者候選答案不符合條件,特判即可。

沒有掛分,拿下2血。

T3 想了挺久的,最開始忽略最後一個基環樹結構的限制,跑一個純正的 DP,但是加上最終限制的時候無法直接處理。

思考最終的答案肯定是當前的 DP 值減去這個限制給予的答案,那我只需要找到這個貢獻即可。

這個比較好實現,我們把 DP 陣列改成三維,新的維度表示第一層選擇的元素編號為 \(i\)

這樣可以先預處理前兩層的 DP 值,剩下的按照方程:

\[dp_{i,j,k}=\sum_{j=1}^{siz_{i-1}} dp_{i,j,k-1} ~~~~ 條件不想寫了 \]

轉移就行了。

寫完以後算了算可以有 30pts。

此時時間剩的不多,T4 按照題意直接 DP 可以有 10pts,我看 \(a_i=0\) 的性質好像可以寫,先估一下。

寫完正常 DP 以後發現錯了,檢查發現沒有賦初值。

意識到之後過了樣例。發現剛才的性質發現就是一個線段樹。

時間還剩 10min,發現這個性質好像可以用樹狀陣列代替線段樹從而節省時間,寫完以後才意識到樹狀陣列無法維護,導致丟了20pts。

賽後

最終得分 100+100+30+10=240,沒有掛分,但是也沒有寫到能寫的分數。

CSP-S下週就考了,所以基礎程式碼能力還需要沉澱。

賽後試了試 10min 能不能寫一顆線段樹,發現不能。

現在思維方面不算太差,但是容易想偏導致該寫的分數沒寫上去,就比如這次 T4 的初值和線段樹部分。