Loading

[ds 记录]abc263ex Intersection2

题意:给定 \(n\) 条线,求两两交点与原点距离的第 \(k\) 远值。

直接做很难,转为二分答案。现在,需要解决:给定 \(n\) 条直线,这些线在圆心原点半径为 \(k\) 的圆中有几个交点。

将直线转化为圆的弦,再将弦的端点用圆心角表示以加以离散化,问题变成了:给定若干个区间 \([l_i, r_i]\),有几对区间 \([l_i,r_i]\)\([l_j,r_j]\) 满足 \([l_i,r_i] \cap [l_j, r_j] \neq \varnothing\)

考虑将区间端点做排序,用线段树维护,一个个扫过去,如果是左端点,就在线段树上查询该区间内的其它的右端点数,如果是右端点,就在线段树上更新。这样能做到 \(O(n \log n)\)

将问题转为判定是一步重要的转化,此后转为区间问题是对问题本质的精准提取。感觉这题并没有一般的 abc ex 那么难,或者说,难点在于计算几何的计算,但是因为位置原因,赛时一直没敢开。

代码留坑罢,等学点计算几何再说。

posted @ 2022-08-11 12:42  purplevine  阅读(41)  评论(0编辑  收藏  举报