2020多校1 - Leading Robots(单调栈)
题意:有 T T T 个赛事,每个赛事中有 N N N 个机器人准备在从左往右水平赛道上赛跑,已知每个机器人的初始位置 p i p_i pi 以及加速度 a i a_i ai,初始速度为 0 0 0,现假设赛道无限长的情况下有多少个机器人会在赛跑过程中处于过“领先”情况,某个机器人“领先”定义为该机器人在当前时刻 t t t 跑在所有人前面且是唯一一个。
范围: 1 ≤ T ≤ 50 ; 0 < n ≤ 5 e 4 ; 0 < p i , a i < 2 31 1 \le T \le 50;0 < n \le 5e4;0 < p_i, a_i < 2^{31} 1≤T≤50;0<n≤5e4;0<pi,ai<231
分析: 我是这样思考的,由于初始位置以及加速度都是固定的,那么如果当前的领跑者 A A A 被某个机器人 B B B 超过了,那么之后 A A A 永远都不可能再追上 B B B,因此我们只需要不断确定当前的领跑者会不会接下来被其他机器人追上。
暴力的方法是先根据机器人的初始位置升序以及加速度升序进行排序,那么排序后最后一个机器人就是当前的第一个领跑者,然后我们可以每轮对其后方的机器人求最小的相遇时间 t = m i n ( 2 ∗ ( p j − p i ) a i − a j ) t = min(\frac{2*(p_j-p_i)}{a_i-a_j}) t=min(