CSP2024-22

Lu_xZ發表於2024-09-18

A

題意:給出一棵樹,斷兩條邊分成三份 \(a, b, c\),最小化 \(\max (a, b, c) - \min(a, b, c)\)

一個自然的想法是列舉 \(x\),斷掉 \((x, fa)\),在剩餘部分儘可能均分。

對於不是 \(x\) 祖先的點,找大小最靠近 \(\frac{n - sz_x}{2}\);對於 \(x\) 的祖先,找最靠近 \(sz_x + \frac{n - sz_x}{2}\) 的。submission

另解:隨機一個根,啟發式合併找子樹內 size 內最接近 \(\frac{sz_x}{2}\) 的,對應斷 \((x, fa)\) 再在子樹內斷一刀。效率不會分析。

B

題意:\(1 \sim n\) 順次排列,每次等機率選出兩個相鄰的人 \(i, j\)\(i\) 贏的機率為 \(\frac{a_i}{a_i + a_j}\)\(j\) 贏的機率為 \(\frac{a_j}{a_i + a_j}\),贏的人繼續留在場上。

求第 \(k\) 個人最後獲勝的機率。\(n \le 500\)

\(f(i, j, k)\) 表示只考慮區間 \([i, j]\)\(k\) 獲勝的機率。由於不需要考慮每一回合的發生順序,\(f(i, j, k ) = f(i, k, k)\times f(k, j, k)\)

不能由上述表示式求出的情況只有 \(f(i, j, i)\)\(f(i, j, j)\),記作 \(l(i, j)\)\(r(i, j)\)

\(l(i, j)\) 為例,肯定是把 \([i + 1, j]\) 拆成若干區間,每個區間的勝者與 \(i\) 比賽,設最後一個區間 \([k, j]\),列舉勝者 \(p\)

\[l(i, k - 1)\sum_{p = k}^j r(k, p) \times l(p, j) \times \dfrac{a_i}{a_i + a_p} \]

最後一個區間長為 \(a\)\(p\) 獲勝的機率是多少?不妨先考慮每一回合的順序,一個人被刪除則加到末尾,最後能得到一個排列。

總共 \((j - i)!\) 種排列,先把 \(p\) 放到末尾,剩下 \(j - i - 1\) 個人隨便排,機率等於 \(\dfrac{1}{j - i}\),與 \(a\) 無關。

\[\begin{aligned} l(i, j) &= \dfrac{1}{j - i}\sum_{k = i + 1}^j l(i, k - 1)\sum_{p = k}^j r(k, p) \times l(p, j) \times \dfrac{a_i}{a_i + a_p}\\ \\ &= \dfrac{1}{j - i}\sum_{p = i + 1}^j l(p, j) \times \dfrac{a_i}{a_i + a_p}\sum_{k = i + 1}^p l(i, k - 1)r(k, p)\\ \end{aligned} \]

後面一個和式只與 \(i, p\) 有關,dp 同時算一下貢獻,做到 \(O(n)\) 轉移。時間複雜度 \(O(n^3)\)submission

C

題意:\(n\)\(m\) 列的網格,左下角為 \((0, 0)\),右上角為 \((m, n)\),保證 \(2\nmid m \land n\perp m\)

若干格子(非格點)中有方塊,給出 \(k\) 個方塊的右上角左邊。初始位置在 \((\frac{m}{2}, 0)\),初始方向向量 \((-1, 1)\)(左上)。

撞到邊界或方塊發生反射,一個方塊被撞到會立刻消失。求所有方塊消失的時刻,資料保證有解。\(n, m, k \le 10^5\)

能從 \((x_0, y_0)\) 直接撞到一個方塊當且僅當 \(x + y\)\(x - y\) 相同,這取決於當前方向,分討一下。

複雜度瓶頸在於從一個方塊到下一個方塊有可能經過 \(O(n)\) 個邊界點。

如果 \(x, y\) 都是邊界點,\(x\) 從這個方向射到 \(y\), 下一次延這個方向還是到 \(y\)。並查集壓縮路徑,複雜度 \(O(n\log n + n\alpha(n))\)

程式碼不會寫,碼力太弱。

D

題答題: