|
|
$H$ 的数据范围暗示,需要高效的算法来确定分界值 $u^*$。由于分界值 $u^*$ 和划分出的席位数(即 $u_i/2^j \ge u^*$ 的 $(i,j)$ 对数)之间具有良好的单调关系,可以用二分 $u^*$ 的办法求解。 每次二分 $u^*$,对每个 $u_i$ 判断可以分得多少席位。整理不等式可得 $$j \le \log\frac{u_i}{u^*}$$ 故可以分得 $\left\lfloor\log(u_i/u^*)\right\rfloor$ 个席位。对每个 $u_i$ 可以 $O(1)$ 求解(假设忽略运算复杂度),则总复杂度为 $O(T\log H)$,可以通过本题。 直接对 $u^*$ 二分,可能会出现很大的精度问题:每个 $u_i$ 最少分得 $H/T$ 个席位,故 $$u^* \approx \frac{u_i}{2^{H/T}} \rightarrow 0$$ 一种解决办法是,对 $v^*=\log u^*$ 进行二分,则可以转化为 $j = \left\lfloor\log u_i − v^*\right\rfloor,相对而言精度问题不大。 更进一步地,可以对 $v^*$ 的整数部分和小数部分分开求解。整数部分需要根据是否大于 $\left\lfloor\max\log u_i\right\rfloor简单讨论,小数部分直接排序即可。这样可以完全避免精度问题。
题目4268 [THUPC 2025 pre] 摊位分配
AAAAAAAAAAA
评论
2026-01-24 17:52:10
|