CF 1253 題解
A Single Push
考慮令 \(d_i=b_i-a_i\), 那麼合法當且僅當 \(d\) 在一個字首和一個字尾都是 \(0\), 其餘地方值一致並且非負.
B Silly Mistake
注意到能作一次劃分的時候立即劃分一定更優, 因為這樣就不會因為潛在的一天兩次進入辦公室而得不到答案.
貪心的模擬即可.
C Sweets Eating
首先把 \(a\) 降序排列, 用手去玩前幾個值, 注意找遞推關係: (令 \(k = 2\))
觀察得 \(f_i=sum_i+f_{i-k}\), 遞推即可.
D Harmonious Graph
考慮一個邊 \(l\rightarrow r\), 那麼意味著 \(l\) 到 \(r\) 這個區間都聯通. 維護這樣的連通性只需要並查集, 順便用並查集跳過已經合併的位置, 那麼暴力做就是對的.
需要新增的邊就是目前的連通塊數減掉最終連通塊數, 證明考慮每一條邊合併兩個連通塊.
E Antenna Coverage
注意到 \(n\) 比較小, 那麼考慮一個 \(O(nm)\) 的 dp, 設 \(f_i\) 表示用第 \(i\) 格之前的信標去覆蓋前 \(i\) 個位置的最小代價, 列舉覆蓋第 \(i\) 格所用的信標 \(j\), 計算剛好覆蓋 \(i\) 時該信標所覆蓋的左端點 \(l\), 然後轉移 \(f_i\leftarrow cst+\min_{l\leq j<i}f_j\), 後半部分在單調棧上二分即可.
問題是最後面的信標可能在右側覆蓋範圍超出了 \(m\), 但是注意到它一定不會超過 \(2m\), 那麼計算到 \(2m\) 即可.
F Cheap Robot
這道題是很牛的. 首先考慮求出來每個點離它最近的充電站的距離 \(dis_i\), 以及該充電站編號 \(near_i\). 暴力做直接炸了, 但是考慮多源 dij 就可以了.
考慮列列式子, 對於一條邊 \(u\rightarrow v : w\), 設經過 \(i\) 時電量為 \(c_i\), 答案為 \(x\), 由於任意充電樁到達它都需要 \(dis_i\) 代價, 而它到達任意充電樁都需要 \(dis_i\) 代價, 因此有:
我們不妨認為機器人從 \(u\) 走到了 \(v\), 那麼:
那麼不難發現:
移項, 得:
我們現在有答案的一個下界, 考慮現在有路徑 \(P:u\rightarrow v\), 而現在令答案是 \(\max_{(u,v):w\in P}(dis_u + dis_v + w)\), 是否存在合法路徑呢? 存在的, 設路徑表示為 \(p_1\rightarrow p_2\rightarrow p_3\rightarrow \ldots\rightarrow p_{k-1}\rightarrow p_k\), 那麼我有足夠的電量從 \(p_1\) 走到 \(near_{p_2}\), 再從 \(near_{p_2}\) 走到 \(near_{p_3}\), 以此類推即可.
因此把每條邊重新賦邊權, 然後建立最小生成樹, 倍增求鏈上最大值即可.