【发布时间】:2013-03-05 09:10:44
【问题描述】:
有 2 个圆,它们的中心是固定的,将作为输入给出。那么将有n个点,其x和y坐标作为输入给出。
最后会有q个查询。对于每个查询,将给出两个圆的半径(让它们分别为 r1 和 r2)。输出每个查询的第一个圆或第二个圆内的总点数。如果点到圆心的距离小于或等于圆的半径,则该点位于圆内。
约束:n, q
我正在寻找 O(nlogn) 或 O(nlog^2n) 预处理,然后是每个查询的 O(logn) 算法。 每个查询的 O(n) 解决方案太慢。任何想法如何破解这个?
【问题讨论】:
-
创建两个数组,根据点的距离对点进行排序。这需要 O(n log(n)) 进行排序。然后在两个数组中对每个查询进行二进制搜索,以找到相应圆圈中的最后一个点。这需要 O(log(n))。
-
如果一个点在两个圆圈内,那么它将被计算两次