國慶集訓 Day 1
2024 年 10 月 1日
Status: CLOSED
\(\def\EZ{\textcolor{#51af44}{\text{EZ}}}\EZ\) 表示簡單,10分鐘內就能想到。
\(\def\HD{\textcolor{#3173b3}{\text{HD}}}\HD\) 表示中等,能獨立想出
\(\def\IN{\textcolor{#be2d23}{\text{IN}}}\IN\) 表示困難,獨立思考能想到 \(50\%\) 以上
\(\def\AT{\textcolor{#383838}{\text{AT}}}\AT\) 表示非常困難,獨立思考只能想出 \(50\%\) 以下
Overall
\(\EZ\)
game | car | candy | produce | total | |
---|---|---|---|---|---|
Score | 90 | 100 | 100 | 0 | 290 |
Expected | 100 | 100 | 100 | 100 | 400 |
Ideal | 100 | 100 | 100 | 100 | 400 |
T1 填數遊戲 game
\(\EZ\) \(\text{pts: }\textcolor{#51af44}{90}/100\)
掛分:變數名寫錯 \(100\to 90\)
顯然的貪心。
T2 擺渡車 car
\(\EZ\) \(\text{pts: }\textcolor{green}{100}/100\)
顯然的貪心,考慮一定選擇最小的那些數,則可以權值線段樹上二分。
但是權值線段樹上二分 (1log) 跑的沒有二分+樹狀陣列 (2log) 快就比較抽象了。
T3 分糖果 candy
\(\EZ^{+}\) \(\text{pts: }\textcolor{green}{100}/100\)
考慮進行二分判定,判定時作一個 dp,設 \(f_i\) 表示前 \(i\) 個數裡面每一段的和都不超過 \(mid\) 最大能分多少段,這個的話,可以用線段樹或者平衡樹最佳化,我用了 FHQ-Treap 進行最佳化。
T4 寶石加工 produce
\(\HD\) \(\text{pts: }\textcolor{red}{0}/100\)
掛分:初始化寫錯 \(100\to 0\)
dp 是顯然的,但是隻能一個詢問一個詢問地做,但是轉移方式全都是一樣的。
這裡有一個 Trick,在兩維上加減 1 的這種 dp 可以稱為是網格型 dp,把他看作是網格圖上多次詢問最長路,經典的技巧來自於 P3350 [ZJOI2016] 旅行者。
但是我們應該進一步檢視這個 Trick,這要求一個詢問它的貢獻是可以拼起來的,中間計算拼起來這個過程的複雜度是可以接受的(但是直接每個詢問計算不可以接受),所以我們就考慮最大化利用算出來的資訊來儘量拼接出詢問的答案,那麼這個時候怎麼決定計算哪些呢?可以進行分治,則可以得到詢問的必經點,計算即可。
很好,但是本題有一個計算量正確的暴力。
考慮離線所有詢問,並對每個左上角做一次,可以自行考慮為什麼對。
來自 nie_zy 的分塊演算法,其實核心思想與正解類似:
考慮對 \(n,m\) 中較大者進行分塊,在每一塊的分界線上對下一個分界線計算最長路,每次詢問時邊角進行暴力,中間則再次進行 dp 獲得最長路。
更新:複雜度是錯誤的,為 \(\mathcal O(qc^{\frac{5}{4}})\)
關鍵就是意識到這種 dp 相當於最長路,答案可以拼接。