1. 程式人生 > 其它 >【考試總結】2022-05-24

【考試總結】2022-05-24

奇怪的博弈

首先黑色白色棋子是獨立的,所以局面 \(\rm SG=SG_{B}\oplus SG_{W}\),而 \(\rm SG_W\) 就是所有白色石子堆的大小異或和

由於每次只能取走數目最小的一堆中的石子,那麼相對大小關係不會發生改變,也就是說沒取完之前都只能取這堆石子

此時可以通過簡單推導得到表示式,即 \(SG_{B}=\min pile-[(\min=\max)\oplus (cnt_{min}\equiv 1\mod2)]\)

列舉最小的堆中的石子個數,此時問題本質上是求一個多重集合的子集異或和為 \(t\) 的子集數量

使用線性基判定是不是能表示出來,如果可以那麼對於不線上性基中的元素,每種 “是否在子集” 的分配方案都可以對應一個線性基中的分配方案

倒序列舉複雜度即 \(\Theta(n\log W)\)

賽時的暴力 \(\rm DP\) 寫錯模數是怎麼回事呢?

奇怪的拆分

\(f_n\) 表示本題中定義的集合形成的二叉樹數量,考慮列舉左右兒子大小並忽略其位置可以得到下述方程

\[f_{n}=1+\frac12\sum_{i=1}^{n-1}\binom{n}{i}f_if_{n-i} \]

使用 \(\rm EGF\) 來補項化簡可以得到:

\[2F=\frac 12F^2+e^x+\frac 12 \]

解方程過後使用多項式開根即可

奇怪的植物

使用 \(\rm AC\) 自動機維護所有文字串,由於 \(\sum |t_i|\le 40\)

所以可以將每個點的 \(\rm DP\) 寫成矩陣的形式,套用倍增即可得到一個複雜度 \(\Theta(nl^3\log n+ql^2\log n)\) 的做法

其實第一步的倍增中不必要每個元素都處理 \(\rm 1,2,\dots \log_2dep\) 的所有轉移矩陣,大可使用樹狀陣列的思想每次消掉深度差的 \(\rm lowbit\) 來進行上跳

那麼讓 \(\sum\log_2\rm lowbit(dep)\) 儘量小成了現在的目的,可以在根上方新增一系列虛點,即只改變深度,不含有任何資訊

設最終的新增的點數為 \(L\),初始 \(L=0\),從小向大遍歷每個二進位制位 \(i\),如果未確定 \(\rm lowbit\)

的元素中深度加 \(L\) 的第 \(i\) 位的數量超過第 \(i\)\(1\) 的元素就讓 \(L\leftarrow L+2^{i-1}\) 來讓更多的元素 \(\rm lowbit\) 儘量小即可

經過上述修改之後,使用 \(\Theta(n\sum_{i}{2^i})=\Theta(n)\) 發現預處理複雜度中的 \(\log\) 消失了