首先对于每辆车,能够判定它为超速的测速仪肯定是一段区间,如果这段区间不在 1∼m 的范围内,则这辆车不会被判定为超速。否则,我们可以将这段区间看成一个限定条件,即我们在所选出来的测速仪中,对于每一个限定条件 l
i
,r
i
,至少有一个测速仪(假设这个测速仪的位置为 x)满足 l
i
≤x≤r
i
,并且我们希望选出来的测速仪尽可能少。
下面进行分类讨论,得出限定区间。
对于每个车子 i,其超速情况分为以下两种:
当 a
i
> 0 时,若 v
> i
>
> V,则这辆车在一开始就超速了,那么限定区间的左端点即为满足 p
> j
>
> d
> i
>
> 的最小的 j;否则,根据公式,这辆车驶入 d
> i
*
2a
i
V
2
−v
i
2
这个位置时,其速度会到达 V,那么限定区间的左端点即为满足 p
j
> d
> i
*
2a
i
V
2
−v
i
2
的最小的 j。而以上情况的区间右端点显然都为 m,因为车子的速度是单调递增的。
当 a
i
≤0 时,若 v
i
≤V,则代表这辆车的速度永远都不会超过 V,所以这辆车不会被判定为超速;反之则代表 v
i
> V,限定区间的左端点即为满足 p
> j
>
> d
> i
>
> 的最小的 j,再根据公式,二分出最大的满足
> v
> i
> 2
>
> +2a
> i
>
> ×(p
> k
>
> −d
> i
>
> )
>
> V 的 k,作为限定区间的右端点。
接下来考虑如何选出最少的点使得对于每个限定区间,至少有一个测速仪在该区间内。
首先将所有区间以左端点为第一关键字、右端点为第二关键字排序(左端点按照从小到大的顺序,右端点按照从大到小的顺序排序)。对于两个区间 [l
i
,r
i
] 及 [l
j
,r
j
],若 l
i
≤l
j
,r
i
≥r
j
,那么 [l
i
,r
i
] 这个区间是没有用的,因为一个点若在 [l
j
,r
j
] 内,它也必定在 [l
i
,r
i
] 内,所以对于这样的区间,是可以不考虑的。
那么在处理之后就满足所有区间的左端点、右端点都是按照升序排序的,再每次贪心的选当前区间的右端点,覆盖到不能覆盖的区间为止。