[ZJU 2107]Quoit Design(平面最近点对)

来源:互联网 发布:小米笔记本pro 知乎 编辑:程序博客网 时间:2024/05/19 12:16

【题目大意】:

给你N个点,求最近的两个点的距离,然后除以2输出。

【题目分析】:

这个就是经典的平面最近点对问题。求法就是分支策略,不断地二分,然后取最小。然后需要注意的就是越过中线的点对的处理。

其实那个很猥琐,想法就是找出变长为2ans*ans的矩形,然后进行枚举。这里有个很诡异的结论,就是这个矩形当中的点数不会超过8。

大致流程:

1、先按照x和y坐标进行排序
2、调用分治程序
3、分情况讨论
4、若是一个点则返回无穷大
5、若是两个点则返回两点之间的距离
6、若是多个点则分治
7、合并,查看是否最近点对是否跨立于左右区域
8、假设当前最近点对距离为ans,则寻找在2ans*ans的矩形范围内点
9、可以证明,2ans*ans这个矩形的点不超过8个,之后进行枚举
10、得出最近点对

【代码(很丑,大家尽情鄙视~)】: