恋爱入门教学题解
恋爱入门教学
题目背景
HF 学会了说唱,夺得了中国第一男高的称号,迷倒了万千迷妹收获了大笔的金钱。
他广撒网广交友,交到了许多卡哇伊的 npy,可是麻烦随之而来。
题目描述
每一个 npy 对 HF 都有一个好感度 \(Favorbility_i\)(下文简记为 \(F_i\))。而 HF 秉持着公平的原则,对于每一个 npy 的好感度 \(f\) 是一样的。于是,好感的不对等会造成一定的麻烦。
每一个 npy 都有一个麻烦率 \(Troublesome_i\)(下文简记为 \(T_i\)),如果是纠缠,那么 \(T_i\) 为正,如果是冷漠,则 \(T_i\) 为负。或许可能是真爱,有的 npy 的 \(T_i\) 为 \(0\)。
但是与每一个 npy 相处会有一个基础的麻烦度 \(B_i\),由于也可能是帮助,所以 \(B_i\) 可能小于零。
HF 为了不让自己爆炸,所以想要最小化 HF 的麻烦度。
由于朋友是一个一个交的,所以他每交到一个 npy 就需要调整自己的 \(f\) 以减少麻烦。
形式化来说,就是对于 \(k = 1, 2, \cdots n\),最小化:
输入格式
第一行一个数 \(n\) 表示 npy 的总个数。
接下来 \(n\) 行,每行三个整数 \(T_i, F_i, B_i\)。
含义见题目描述
输出格式
一行 \(n\) 个数,误差在 \(10^{-4}\) 以内则视为正确。
数据规模
对于 \(100\%\) 的数据 \(n \le 5e5, |T_i|, |F_i|, |B_i| \le 1e4\)。
特殊性质:
- A:保证 \(T_i = 1\)
测试点编号 | \(n \le\) | 特殊性质 |
---|---|---|
\(1 \sim 3\) | \(10\) | 无 |
\(4\) | \(10\) | A |
\(5 \sim 9\) | \(3000\) | 无 |
\(10\) | \(3000\) | A |
\(11 \sim 14\) | \(100000\) | 无 |
\(15\) | \(100000\) | A |
\(16 \sim 20\) | \(500000\) | 无 |
题解
T4 love
整理式子:
Sol 1
首先考虑绝对值是个凸函数的性质:凸函数 + 凸函数 = 凸函数
。可以发现,所求函数满足两段单调。
所以我们可以三分 \(f\) 然后 \(O(n)\) 算出最终答案。
复杂度 \(O(n^2 \log v)\) 期望得分 \(20\)。
三分瓶颈在于求出最终答案,考虑如何优化。
我们把绝对值拆开分段考虑。
当 \(x < - b_i / a_i\) 时,与 \(x \ge - b_i / a_i\) 时贡献不一样,考虑将函数按照 \(- b_i / a_i\) 排序,将函数相加(对 \(a_i\) 和 \(b_i\) 做前后缀和,利用数据结构维护)
所以可以二分断点,以此求出答案。
注意 \(a_i = 0\) 的情况。
复杂度 \(O(n \log n \log v)\),期望得分 \(75\)。
sol 2
先考虑特殊性质。
不难发现,可以转化为最小化数轴上一个点到其他点的最小距离。
这应该给了很多提示。所以这一部分可以通过 heap
水过。
实测,其实利用堆可以过大部分数据,只是这复杂度……\(O(玄学)\)
期望得分:\(玄学\)
利用绝对值,强制使得 \(a_i \ge 0\),同时也改变 \(b_i\) 的符号,可以得到类下的式子:
于是相当于在数轴上 \(\frac {b_i} {a_i}\) 的位置放 \(a_i\) 个点。求 \(x\) 到这些点的最小距离。
而如果要最小化距离,那么显然是在中位数的位置。
所以考虑使用平衡树维护中位数,以及 \(b_i\) 前缀和,求解距离即可。
同时,也可以考虑离散化,在线段树或者树状数组上二分可以做到 \(O(n \log n)\)。
期望得分 \(100\)