1 条题解
-
0
自动搬运
来自洛谷,原作者为

vegetable_king
全身全霊!MORE MORE JUMP!!搬运于
2025-08-24 23:02:12,当前版本为作者最后更新于2024-08-17 22:06:03,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
出题人题解。
首先考虑一个最基本的策略:
假设我们要 check 是否合法。
那么我们只需要对于所有的 ,分别令 ,其他的 为 ,都 check 一次即可。
证明是显然的,如果我们要在 的情况下分配其他的 使得第 个学生的加权总分超过第 个学生的加权总分 ,那么将剩下的 集中在 最大的第 个学科上一定不劣。
于是根据上述策略,我们得到了一个单组数据 并且需要二分的做法,但是答案需要输出有理数,无法二分。
考虑不排序而是直接暴力枚举 $i, j, k, l (a_{i, k} < a_{j, k}, a_{i, l} > a_{j, l})$,则我们得到一个不等式:>
$$X a_{i, k} + (1 - X) a_{i, l} \le X a_{j, k} + (1 - X) a_{j, l} $$解得:
$$X \ge \frac{a_{i, l} - a_{j, l}}{a_{i, l} - a_{j, l} + a_{j, k} - a_{i, k}} $$于是题意就相当于对于每个 ,求上式的最大值,这个东西显然可以暴力 做。
发现需要最大化的分式是 形式的,所以我们枚举 确定 并枚举 最小化 。
因为 只与 相关,并且 ,所以我们可以对每一对 枚举 来 预处理出最小次小的 ,即可做到 查询 。
于是我们得到了一个单组数据时间复杂度为 的做法。
实际上,如果我们先枚举了 ,我们就不需要对所有的 去判断了。根据比较的传递性,如果存在 满足 ,则无需考虑 这一对是否满足要求。于是我们对于某个 ,将 相等的 划为一类,则我们只需要考虑数值相邻的两个类。
考虑固定类别之后, 都被固定了,则 中的 已经被确定,则我们为了让分式最大,应该最大化 ,而 是在两个类中各选取一个数作差, 选最大, 选最小即可。
每个点只会被一个类包含,对于每个类暴力扫一遍求出最大值与最小值,时间复杂度是 的。
于是我们又得到了一个单组数据时间复杂度为 的做法。
结合一下
考虑数据分治, 时跑 , 时跑 ,则单组数据时间复杂度为 。
设 ,则 。所以单组数据时间复杂度为 ,可以通过本题。
另外,涉及到的分数分子和分母显然都不会超过 ,不是 的倍数,必定存在逆元。
关于分数比大小,因为分子分母都在 int 范围内,所以可以写一个 frac 类,比大小的时候开 long long 交叉相乘就不会有精度损失。
- 1
信息
- ID
- 9689
- 时间
- 1500ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者