$n$个水平线段,求某个投影的角度,使得投影的线段的最右端$-$最左端最小。(投影线段可以接触,不能相交)
借鉴大佬博客
应为要计算出斜率范围,但是明显可以垂直,这里可以让$x,y$轴交换即可。
显然斜率在$k\notin(\frac{xl_i-xr_j}{y_i-y_j},\frac{xr_i-xl_j}{y_i-y_j})$
大小可以交换。然后这里有个小技巧,将所有不可行区间排序,然后通过类似括号匹配,来确定可行的边界。
找到所有边界$O(n^2)$。
显然一个一个验证过于复杂,考虑最大和最小,显然导致距离无限远。
官方题解提到
若任两个线段的投影都不相交,那么我们就一定能够增加、减小 $k$ 的值。由于投影最靠前的线段和投影最靠后的线段的 $y$ 的不同, $k$ 的改变势必能够使之投影的相对位置接近,从而减小答案。
三分即可。$O(n^2\log n)$
代码
1 |
|