CF 705 題解

snowycat1234發表於2024-11-18

CF 705 題解

A Hulk

模擬即可.

B Spider Man

打 sg 表可以發現, 奇數個球先手必敗 (sg=0), 偶數先手必勝 (sg=1). 多個組合只要把 sg 值異或起來就好.

C Thor

暴力模擬就可以了, 用佇列模擬.

D Ant Man

結論: 按照編號由小到大加入連結串列, 每次儘量讓答案最小貪心就是對的.

若原來是 \(i\rightarrow j\) , 插入 \(k\) (不妨認為 \(i < j\)), 那麼貢獻如下變化:

  • i 變大
  • 變大到 j

變成:

  • i 變大
  • 變大到 k
  • k 變小
  • 變小到 j

從變化量的角度, 你插入了 \(k\), 那麼 變大到 kk 變小 不管插到哪裡去都不變, 唯一的差別就是 變大到 j 變成 變小到 j.

類似的分析, 若 \(i > j\), 可以認為 i 變小 會變成 i 變大.

也就是說, 每次插入, 會新增一個 變大到 和一個 變小, 會把一個 變大到 變成 變小到 或者 把一個 變小 變成 變大.

注意到這些變化是不可逆的, 那麼意味著沒有後效性, 因此貪心是對的.

這篇題解沒有考慮和 \(s\)\(e\) 的邊界情況, 但是據說證明是類似的.

E Black Widow

考慮圖論建模, 把每一個表示式視為一個點, 那麼如果兩個表示式含有相同的變數, 那麼這兩個表示式連一條邊.

這一定是一堆鏈和環, 對於每一個聯通塊 (如果是環就破環為鏈), 然後設前 \(i\) 個表示式的異或和為 \(j\), 當前公用變數值為 \(k\) 的方案數為 \(f_{i,j(0/1),k(0/1)}\), 最後把每個連通塊揹包合併即可.