CSP2024-22

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

题答题:

posted @ 2024-09-18 07:29  Lu_xZ  阅读(23)  评论(0)    收藏  举报