机灵自行车

文章
6
资源
0
加入时间
3年2月3天

POJ1106极角排序

题目POJ Transmitters给出若干个点和一个半圆,半圆可以绕着圆心任意旋转,问最多能覆盖多少个点。解题思路距离圆心的距离大于半径的点可以直接先排除掉。将剩余的点进行极角排序,然后用一个双端队列维护能被半圆覆盖的点,当队首和当前处理点的角度大于π\piπ时,弹出队首元素。期间队列最大的size就是答案。需要注意的是,当前处理点极角接近π\piπ时,最开始邻近−π-\pi−π处的点也会有贡献,可以将所有点复制一份加到后面,并将复制的点极角加上2π2\pi2π。时间复杂度O(nlogn)O