恋爱入门教学题解

恋爱入门教学

题目背景

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\),最小化:

\[\sum_{i = 1}^k |T_i(F_i - f) + B_i| \]

输入格式

第一行一个数 \(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

整理式子:

\[\sum_{i = 1}^k |a_i x + b_i| \]


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\) 的符号,可以得到类下的式子:

\[\sum_{i = 1}^k a_i |x - \frac {b_i} {a_i}| \]

于是相当于在数轴上 \(\frac {b_i} {a_i}\) 的位置放 \(a_i\) 个点。求 \(x\) 到这些点的最小距离。

而如果要最小化距离,那么显然是在中位数的位置。

所以考虑使用平衡树维护中位数,以及 \(b_i\) 前缀和,求解距离即可。

同时,也可以考虑离散化,在线段树或者树状数组上二分可以做到 \(O(n \log n)\)

期望得分 \(100\)

posted @ 2023-08-05 13:25  jeefy  阅读(45)  评论(0编辑  收藏  举报