1. 程式人生 > 其它 >Atcoder比賽總結

Atcoder比賽總結

ARC130

週末把週日晚的東西都提前補了才過來打。

A: 給出一個字串,求有多少個位置對,使得分別刪去兩個位置的兩個字串相同。
連續一串相同字母內的任意兩個都合法。

B: 一個 \(W \times H\) 的矩陣,每次操作將某一行或一列染色,求最終狀態下每個顏色有多少個格子。
從後往前直接做。

C: 給出兩個數 \(a\) , \(b\) ,讓你將其重排列,最小化 \(a+b\) 每一位的和。
考慮兩數相加進位是有 \(-9\) 的貢獻的,如果兩數之和為 \(9\) ,但是後面有 \(1\) 進位,也可以有貢獻。
那麼暴力列舉兩個最小位,這裡欽定其能進位,由於進位至多為 \(1\) ,所以可以貪心地將能進位的全部靠在最小位,此時能進位的是 \(9\)

~\(18\)
將這些放完後會有兩種情況,一種是兩個數都還有剩,這時只能全部求和了。
另一種是一種用完了,那另一個數就能優先把 \(9\) 放完,此時可以去掉所有 \(9\) 的貢獻。
這樣寫 WA 了兩發,還一直以為是細節沒寫對。
後來意識到最後的兩種情況可以做點文章。
兩個數都還有剩的可以併到第二種,做法是將列舉的最小位往後移,把影響答案的不可能進位數塞到前面。

D: 給出一棵樹,要求計算這樣的排列數:對於樹上的節點,每個和它相鄰的節點的對應值要麼都小於它,要麼都大於它。
一定要注意到是排列不然會打空。(同時說明了手玩資料的必要性)
我們設 \(f_{i,j,0/1}\) 為在 \(i\)

號節點,其子樹中有 \(j\) 個 小於/大於 它,它的所有兒子都 小於/大於 它,的方案數。
轉移的時候要帶上排列數的係數。