模拟测试75

来填坑了......

T1:

  将$A$和$B$看成变量,那么题意转化为是否存在$A$和$B$,使得$\frac{A}{a_i}+\frac{B}{b_i}$最小。

  解不等式$\frac{A}{a_i}+\frac{B}{b_i}<\frac{A}{a_j}+\frac{B}{b_j}$得:

    $\frac{A}{B}<\frac{a_ia_j(b_i-b_j)}{b_ib_j(a_j-a_i)}$。

  不难看出只与$A$和$B$的比值有关。

  将$(\frac{1}{a_i},\frac{1}{b_i})$抽象成平面上的点,则$\frac{A}{a_i}+\frac{B}{b_i}=z$可以看成一条直线。

  钥匙$z$尽可能小,就要维护一个左下凸包。

  吧$a$和$b$数组排序,用单调栈储存凸包上的点。

  时间复杂度$O(nlogn)$。

T2:

  可以把每个化学物质的键能作为未知量代入,但是有特殊情况,即可以在不知道所有未知量的具体数值的基础上求得的答案。

  发现最终答案只与给定方程的焓变有关,将每个方程所占的百分比看成未知量,拼出最后方程即可。

  时间复杂度$O(n^3)$。

T3:

  撞车次数随时间单调不减没,于是可以二分时间。

  将每个人此时的位置算出,由于每个人都从静止开始做匀加速运动,所以不相撞的条件为相对位置不发生改变。

  将所有人按初始位置排序,问题转化为求最长上升子序列。

  考虑如何求字典序最小的方案。

  LIS的转移为树形结构,动态维护已经建立出来的树,发现字典需大小取决于lca以下,树上倍增维护最小值进行比较即可。

  时间复杂度$O(nlogn)$。

posted @ 2019-10-24 14:17  hz_Rockstar  阅读(122)  评论(0编辑  收藏  举报