1. 程式人生 > 其它 >AtCoder 雜題亂寫

AtCoder 雜題亂寫

AtCoder 雜題亂寫(3)

AGC050C

觀察操作形式,設 \((a,b)\) 表示對手兩側(可以交換順序)還剩下多少格子可以走,初始狀態 \((+\infty ,+\infty)\)

玩家的操作是讓對手的狀態由 \((a,b)\) 變成 \((\min(a,b),0)\)

那麼你手上的操作多於 \(\log\) 次那麼一定可以讓對方死掉,因為每次操作必然讓最開始的 \(a+b\) 減少 \(\frac1 2\)

那麼設 \(dp_{i,j}\) 表示操作完成了 \([i,n]\),你還需要 \(j\) 操作才能讓對方輸(或者對方還有 \(2^j\) 個格子能走) 的方案數

轉移考慮如果這個操作可以不由對方執行,那麼轉移給 \(dp_{i-2^j-1,j+1}\)

因為對手需要走這麼多步來達到當前的 \(dp_{i,j}\)

而這裡需要注意的是這個轉移要滿足前面 \(2^j\) 箇中沒有玩家的必操作步

而如果這個操作可以由對手進行的話直接當作廢步轉移給 \(dp_{i-1,j}\),因為有用的步都在上面轉移了,對手剩餘的回合最好選擇呆在區間中點一動不動

ARC087F

考察這個限制:發現對於一條邊而言,使其經過最多次數一定是讓 \((i,p_i)\) 儘量處於邊的兩側,貢獻是 \(\min(siz_u,n-siz_u)\)

回到全域性角度最大化該式子的和值就是找到重心,\((i,p_i)\) 分別處於重心的兩個不同子樹之中

然而直接統計排列很困難所以考慮減去不合法方案數,設 \(dp_i\)

表示欽定 \(i\) 個位置的 \(p_i\) 和自己是一個子樹裡面的

對於某個子樹的 \(dp_i=\binom {siz}i^2 i!\),這裡前面是選擇 \(i\)\(p_i\) 的方案,後面因為這些 \(p_i\) 可以亂放所以要乘階乘

列舉重心的所有子樹進行揹包即可完成統計

每個 \(dp_i\) 在完成欽定之後剩下的位置可以隨便放 \(p_i\),要乘 \((n-i)!\),最後附加上 \((-1)^i\) 作為容斥係數即可


博主學了三四年OI並不理解基礎容斥式子,下簡記

考察有 \(k\) 個錯誤位置的排列在答案中的計算次數,它會在每個 \(dp_i\times (n-i)!\)

中計算 \(\binom ki\)

再不會容斥基礎組合恆等式還是會的,所以就正確了

AGC052B

考慮該操作的本質:如果以 \(1\) 為根進行 \(\rm{DFS}\),將根到某點路徑上的每個邊的異或和作為該點的權值,那麼對於和根不相連的點,操作一條邊可以視作點權交換

\(a_x\) 表示用 \(w_1\) 作為邊權的時候的點權,\(b_x\) 表示用 \(w_2\) 作邊權的時候的點權

但是這樣的思路明顯有限制:和根相連的邊在操作的時候並不能用點權交換的方法表示

那麼建立一個虛根和 \(1\) 相連,如果能找到一個根和 \(1\) 連邊的邊權 \(W\) 滿足 \(a_x\oplus W=b_y\)\(x,y\) 兩兩配對那麼滿足條件

由於 \(n\) 是奇數,將所有的上述對應式子異或起來之後發現 \(W=\rm{xor}_ {i=1}^n x_i\oplus y_i\)

得到 \(W\) 之後判斷是不是 \(\{a_i\oplus W\}\)\(\{b_i\}\) 相等即可