Atcoder比賽總結
阿新 • • 發佈:2021-11-30
ARC130
週末把週日晚的東西都提前補了才過來打。
A: 給出一個字串,求有多少個位置對,使得分別刪去兩個位置的兩個字串相同。
連續一串相同字母內的任意兩個都合法。
B: 一個 \(W \times H\) 的矩陣,每次操作將某一行或一列染色,求最終狀態下每個顏色有多少個格子。
從後往前直接做。
C: 給出兩個數 \(a\) , \(b\) ,讓你將其重排列,最小化 \(a+b\) 每一位的和。
考慮兩數相加進位是有 \(-9\) 的貢獻的,如果兩數之和為 \(9\) ,但是後面有 \(1\) 進位,也可以有貢獻。
那麼暴力列舉兩個最小位,這裡欽定其能進位,由於進位至多為 \(1\) ,所以可以貪心地將能進位的全部靠在最小位,此時能進位的是 \(9\)
將這些放完後會有兩種情況,一種是兩個數都還有剩,這時只能全部求和了。
另一種是一種用完了,那另一個數就能優先把 \(9\) 放完,此時可以去掉所有 \(9\) 的貢獻。
這樣寫 WA 了兩發,還一直以為是細節沒寫對。
後來意識到最後的兩種情況可以做點文章。
兩個數都還有剩的可以併到第二種,做法是將列舉的最小位往後移,把影響答案的不可能進位數塞到前面。
D: 給出一棵樹,要求計算這樣的排列數:對於樹上的節點,每個和它相鄰的節點的對應值要麼都小於它,要麼都大於它。
一定要注意到是排列不然會打空。(同時說明了手玩資料的必要性)
我們設 \(f_{i,j,0/1}\) 為在 \(i\)
轉移的時候要帶上排列數的係數。