國慶集訓 Day 1

haozexu發表於2024-10-01

國慶集訓 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 相當於最長路,答案可以拼接。

相關文章