Um_nik

【题意】
给定两个集合 \(S,T\),集合里每个元素都是一个二元组 \((v_i, s_i)\)。求 \(\min \limits_{i \in [1, |S|], j \in [1, |T|] }{\cfrac{s_j - s_i}{v_j + v_i}}\)
\(|S|, |T| \le 10^5, v_i > 0\)

【分析】
一个基本方向是把式子拆成一边和 \(i\) 有关一边和 \(j\) 有关的。但是发现并不能直接化简。

使用二分答案解决。考虑答案是否大于等于 \(mid\)

怎么验证:如果大于等于,那么对任意 \(i,j\) 均有 \(\cfrac{s_j - s_i}{v_j + v_i} \ge ans\)

\[\cfrac{s_j - s_i}{v_j + v_i} \ge ans \\ s_j - s_i \ge ans \times (v_j +v_i) \\ s_j - ans \times v_j \ge s_i +ans \times v_i \]

因此得知 \(ans\),可以遍历一遍验证。

【思考】
这个问题里面二分的用意是什么?我们有 \(\min\),我们将其消掉。
(我也搞不清楚为什么这样想,但是确实可以这么做)

ABC236E

【题意】
给定一个数组 \(a_1, ..., a_n\),要求选定若干个数,使得不存在两个相邻的数都没有被选择。求最大平均数和最大中位数。

\(n \le 10^5, 1 \le a_i \le 10^9\)
【分析】

这题也是可以二分。二分可以消除一边的偏序关系(这点倒是和莫比乌斯反演很像),使得接下来的判断具有贪心性质

考虑 \(\cfrac{\sum a_i}{|s|} \ge mid\) 可以怎么描述:我们可以把和式拆到每一个变量上!\(\sum a_i \ge mid \times |s| \rightarrow \sum (a_i - mid) \ge 0\)。这个显然可以用 dp 求出。

中位数的二分就更显然了,可以贪心。

posted @ 2023-02-12 09:45  OIer某罗  阅读(113)  评论(0编辑  收藏  举报