2.12 それは命の證 ——ARC119~121

LarsWerner發表於2024-03-26

今天是 Blessing 的贊助週期的最後一篇古報。之後贊助歌曲未定。如果明天還是未定的話,那麼可能會換成別的日誌,或者繼續 Blessing 的贊助。

ARC119

ARC119D Grid Repainting 3

考慮以行列為邊,\((i,j)\) 表示從行點 \(i\) 連向列點 \(j\)。可以發現,對於一個連通塊,我們一定得剩餘一個行/列沒法直接刪(dfs 樹的根)。於是我們能夠刪的行數+列數的總和是固定的,且能夠刪的行/列的分別最大值也是固定的。容易發現一定是存在某一個取最大值的時候是最優的。於是我們求出應該把行刪滿還是把列刪滿,然後據此構造即可(對於每個連通塊選定一個合適的根)。

ARC119E Pancakes

即找到一組 \(x,y\),使得 \(|a_{x+1}-a_{x}|+|a_{y-1}-a_y|-|a_{x+1}-a_y|-|a_{x}-a_{y-1}|\) 最大。考慮分類討論。假設 \(x<y\)\(a_x<a_y\),那麼只有在 \(a_{x+1}>a_{y-1}\) 時才會 \(>0\)。可以根據 \(a_{x+1}\)\(a_y\) 的關係,以及 \(a_{x}\)\(a_{y-1}\) 的關係分成四類。但若我們更加仔細分析,那麼發現其實只有兩類,且每一類都是類似一個求 \(\max(\min_{c_j\ge d_i,j<i-2} b_j,e_i)\) 狀物。用一個 BIT 即可。

ARC119F AtCoder Express 3

首先這題一眼看上去就是 dp 套 dp。於是我們需要想一個比較好的能夠套 dp 的狀態。由於我們肯定不會從後面的 A 走到前面的 A,所以可以如下設計:考慮進行到 \(i\),起點到 \([1,i]\) 最遠的 A/B 的最短距離 \(f_a,f_b\)。這個是可以直接用 dp 套 dp 求解了。又因為若 \(f_a-f_b>2\),那麼這個 \(f_a\) 就沒用了。所以實際上只有 \(O(n^2)\) 種狀態。

ARC120

ARC120D Bracket Score 2

考慮應該可以取到上界,即最大的 \(n\) 個數取正,其餘取負。這個也是容易的:直接維護一個棧,如果與棧頂正負號相等那就放進棧中,否則就取出棧頂,棧頂取左括號,該數取右括號。

ARC120E 1D Party

考慮每個數的決策一定是,先往一個方向走,碰到另一個之後再拐回去,然後一直走。然後二分,進行 DP:\(f_{i,0/1}\) 表示 \(i\) 一開始往左/右走,最遠能走到右側的多少。轉移分四類情況討論一下即可。

ARC120F Wine Thief

建議看本題討論區。並且提醒自己,不要頭鐵推式子。

\(G(n,k)\) 表示總方案數,容易算出。考慮一種方法:欽定 \(i\) 選,意味著欽定 \(i-1,i+1\) 不選。此時把 \(i-1,i,i+1\) 刪掉,就變成了 \(G(n-3,k-1)\)\(i-2,i+2\) 不同時選)加上 \(F(i-2,n-4,k-2)\)(兩者同時選)。我們把這些展開,發現是一個類似 \(\sum G(n-4i+1,k-2i+1)\) 的式子,但是有很煩的邊界條件。研究清楚邊界條件之後就做完了。

ARC121

ARC121D 1 or 2

觀察發現,一定是存在一個區間都取單點,其餘兩兩配對且一定是最小配最大,次小配次大這樣的形式。並且一定是最外層 \(1\)\(i\)\(n\)\(n-i+1\)\([i+1,n-i]\) 中有一段單點區間,和一段區間 \([l,r]\) 滿足 \(l,l+1,\dots\) 分別配 \(r,r-1\dots\)。於是預處理一下後兩種的區間最值,然後列舉 \(i\) 即可。

ARC121E Directed Tree

考慮直接容斥。\(f(u,i)\) 表示 \(u\) 子樹內欽定 \(i\) 個祖孫關係的情況。轉移先直接揹包,然後再 \(f(u,i)\times (sz_u-i)\to f(u,i+1)\)

ARC121F Logical Operations on Tree

操作一定是先把 and 全部並起來,然後再並 or,也就是說需要存在一個由 and 邊組成的連通塊使得其裡面全是 0。有了這個結論,我們就直接樹形 DP 即可。