QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2026-02-19 13:13:20

Last updated: 2026-02-19 17:49:44

Back to Problem

题解

只有最大的 $4k$ 个 $a_i$ 可能有用,因此我们假设 $n=O(k)$。检验一对 $(x,y)$ 只需要进行一轮 DP,可以做到 $O(k^2)$。至少有两种 DP 方法:$f(i,j)$ 表示选了 $i$ 个 $x$ 和 $j$ 个 $y$,至少需要用到几块木材,最后一块最少用多少;或者直接背包,但是判掉 $\sum \left\lfloor \frac{a_i}{x}\right\rfloor\ge 4k$ 的情况。问题在于如何找到可能的 $(x,y)$。

考虑确定每个木材分出几个 $x$ 和几个 $y$ 之后,有一系列形如 $ax+by\le c$ 的半平面限制。最终取到的 $(x,y)$ 要么是两个半平面的交点,要么是一个半平面和反比例函数 $xy=S$ 的切点,二者的数量分别是 $O(k^6)$ 和 $O(k^3)$。暴力枚举可以做到 $O(k^8)$ 复杂度。

想要通过需要进行剪枝,包括:

  • 单调性,即如果 $x_1\le x_2,y_1\le y_2$,若 $(x_1,y_1)$ 不可行,则 $(x_2,y_2)$ 也不可行。
  • 如果 $x\ge 4y$ 则不如把 $x,y$ 都变成 $\frac{x}{2}$。

加上上述剪枝后,需要检查的 $(x,y)$ 事实上并不多,但是枚举所有交点的 $O(k^6)$ 仍然难以接受。我们可以先计算单个半平面的答案,然后只保留那些可能贡献更优答案的半平面求交点。这样就可以通过了。

也可以直接二分答案,然后枚举反比例函数和半平面的交点,这样的复杂度是 $O\left(k^5\log \frac{V}{\epsilon}\right)$。其中 $O(k^3)$ 来自于每次二分需要检查的半平面个数。进一步的,如果二分的答案是 $S=x^2$,那么 $\sum \left\lfloor \frac{a_i}{x}\right\rfloor \ge 4k$ 的情况是平凡的,否则每个 $a_i$ 和反比例函数有交的半平面数量只有 $O\left(\frac{a_i}{x}\cdot k\right)$,总共 $O(k^2)$,因此可以优化到 $O\left(k^4\log\frac{V}{\epsilon}\right)$。

注:第二个做法中的分析实际上可以说明第一个做法中剪枝后半平面数量也是 $O(k^2)$,总复杂度不超过 $O(k^6)$。

Comments

No comments yet.