A - Dima and Trap Graph
CF366D Dima and Trap Graph
題解:考慮二分滿足答案區間,但是發現這個區間並不具有單調性。於是我們考慮固定一個端點(不妨固定左端點),然後二分右端點,此時右端點是有單調性的。
然後思考如何判斷是否聯通。這題可以直接使用並查集,把在當前判斷的區間內的邊並起來,最後看看 1 節點和 n 節點是否聯通即可。
但是我本人的程式碼成分複雜,dfs剪枝也有,並查集也有。
B - Salazar Slytherin's Locket
CF855E Salazar Slytherin's Locket
題解:數位DP板子題,沒什麼好說的。
C - DZY Loves Colors
CF444C DZY Loves Colors
題解:管他那麼多,我直接大力分塊:
- 1.對於修改,對於左右端點的塊下放tag,把記錄塊內是否為同色的標記記為false(雖然這個塊仍然可能是同顏色的,但是當作不是總沒錯,整塊答案和單點答案都要修改),然後對於中間每一個同顏色的塊打tag(記得修改整塊答案),對於不是同顏色的塊暴力修改
- 2.對於查詢,整塊直接加答案,散點不要忘記加上對應塊的tag
然後分塊比ODT快,但是好像也是顏色段均攤?
D - Distinct Paths
CF293B Distinct Paths
題解:詐騙題,按照題目的意思,若有解,則:(n+m-1<=k),不然顏色就放不下了。
然後考慮搜尋,但是肯定不能全部搜完,會TLE。
我是怎麼知道的?(去CF找一份AC程式碼,發現下面的資料答案太大)
k很小,先壓縮一個狀態表示當前使用過的顏色。然後考慮對於每一個格子,如果沒有放過顏色,那麼從剩下的顏色中隨便放一種本質是相同的,計算一次後直接累加答案即可。
E - The Great Mixing
CF788C The Great Mixing
題解:既然是搜尋專題,我自然不會寫搜尋,但是還是先分析一下題面。
我們發現值域只有1000,卻有1e6種汽水?所以先去重。然後把所有濃度減去n,把題目轉化為調濃度和為0的汽水。
直接揹包,dp[i+maxn]表示濃度和為i的最小消耗的汽水瓶數(因為有負數,統一加一個maxn),但是要注意當前濃度為正數和為負數的轉移順序不一樣。
經過測試,陣列開6e5,maxn開3e5能過。
F - Rats
CF254D Rats
題解:又是詐騙題,手動模擬發現一個炸彈最多炸到290個左右的老鼠,所以大於600只肯定炸不掉,先判掉。
然後直接從每隻老鼠的位置開始搜哪些位置能炸掉這隻老鼠,列舉位置,但是別忘了判掉只有一個位置能放炸彈的情況。