实现

将平面内点按$x$坐标排序,分治$x$坐标,设$ret=min(f(l,mid),f(mid+1,r))$,

将$x\in[mid-ret,mid+ret]$内的点按$y$坐标排序,算每个点与相邻的$6$个点的距离找最优解即可.

时间复杂度:$O(nlogn)$.

#define N 100005
#define INF 1e15
struct point{double x,y;
}p[N];
inline double sqr(double k){return k*k;
}
inline double dis(point x,point y){return sqrt(sqr(x.x-y.x)+sqr(x.y-y.y));
}
inline bool cmpx(point x,point y){if(x.x!=y.x) return x.x<y.x;return x.y<y.y;
}
inline bool cmpy(point x,point y){if(x.y!=y.y) return x.y<y.y;return x.x<y.x;
}
inline double min_d(int l,int r){double ret=INF;if(r-l<=20){for(int i=l;i<r;++i)for(int j=i+1;j<=r;++j)ret=min(ret,dis(p[i],p[j]));return ret;}int mid=l+r>>1;ret=min(min_d(l,mid),min_d(mid+1,r)); while(p[l].x+ret<p[mid].x) ++l;while(p[r].x-ret>p[mid].x) --r;sort(p+l,p+1+r,cmpy);for(int i=l;i<r;++i)for(int j=min(r,i+6);j>i;--j)ret=min(ret,dis(p[i],p[j])); sort(p+l,p+1+r,cmpx);return ret;
}
inline double min_dis(){sort(p+1,p+1+n,cmpx);return min_d(1,n);
}

推荐

http://www.cnblogs.com/xdruid/archive/2012/05/27/CP.html

转载于:https://www.cnblogs.com/AireenYe/p/6257620.html

[模板]平面最近点对相关推荐

  1. CF429D Tricky Function(求解公式、经分析转为求平面最近点对、思维)

    整理的算法模板合集: ACM模板 目录 CF429D Tricky Function 题意实际上就是给定长度为 nnn 的一串序列a1,a2,...,ana_1, a_2,...,a_na1​,a2​ ...

  2. POJ3714 Raid 平面最近点对

    利用分治来求平面最近点对 只需要查后面6个点就好了 原因在于https://blog.csdn.net/liufeng_king/article/details/8484284 两个集合的话就把不同集 ...

  3. HDU-4631 Sad Love Story 平面最近点对

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 数据是随机的,没有极端数据,所以可以分段考虑,最小值是一个单调不增的函数,然后每次分治算平面最近 ...

  4. 平面最近点对问题(分治)

    题目描述 在与联盟的战斗中屡战屡败后,帝国撤退到了最后一个据点. 依靠其强大的防御系统,帝国击退了联盟的六波猛烈进攻. 经过几天的苦思冥想,联盟将军亚瑟终于注意到帝国防御系统唯一的弱点就是能源供应. ...

  5. 平面最近点对问题求解—基于Java语言

    平面最近点对问题求解-基于Java语言 1. 问题描述: 本问题来自<编程之美2.11-寻找最近点对>,文中给出了两种解法:暴力解法,分治解法.其中,暴力解法很简单,求出所有点之间的距离并 ...

  6. 分治法求平面最近点对入门

    一.平面最近点对问题. 平面最近点对:在一个平面上有 n n n个点,求出距离最近的两个点. 平面最近点对是计算几何中一个十分经典且基础的问题,通常采用分治法来解决. 二.直线最近点对的分治法. 在用 ...

  7. HDU 5721 Palace(平面最近点对(分治))

    http://acm.hdu.edu.cn/showproblem.php?pid=5721 n个点,去掉一个点的情况下,最近距离平方之和. 平面最近点对模版题,先求出最近距离,然后找到是哪两个点,然 ...

  8. 【算法分析与设计】平面最近点对(含最近距离、最近点对、第一次分割点集合的输出)

    [问题描述] 给定二维平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小.使用递归与分治策略求解二维平面上的最接近点对问题.假设所有点的集合为S,m为S中所有点的x坐标的中 ...

  9. POJ - 3714 Raid(平面最近点对模板题,几何)

    题目链接:点击查看 题目大意:给出两个含有n个点的集合,在两个集合中分别任选一点,使得这两个点之间的距离最小 题目分析:因为n给到了1e5,所以n*n的暴力肯定是不行了,直接从网上copy了个分治优化 ...

最新文章

  1. php 爬虫去重,浅谈动态爬虫与去重(续)
  2. Spring+Shiro+CAS整合配置笔记
  3. 把html追加到指定id后面,javascript – jQuery,动态追加元素时增加id号
  4. ‘仿微信发表朋友圈’项目中登录功能的业务逻辑
  5. Spring @Configuration
  6. window.location.href 跳转失败
  7. CentOS 6.7编写Shell脚本实现简单跳板机功能
  8. Spring IOC 之解析Bean:解析 import 标签
  9. 用人话说说希尔伯特空间??
  10. 计算机等级考试——四级网络工程师考试大纲
  11. CC13X0CC26X0EvaluationBoard
  12. 支付宝公布春节抢红包大数据 金华人全国第五壕
  13. WinSock网络编程基础(2)客户端
  14. tensorflow 常遇函数
  15. 如何实现IP分配、子网划分、和子网掩码计算
  16. 文件比较 java 标红_如何用java输出word里红色的字体,
  17. AppBar的WTL实现
  18. 拓嘉启远电商:拼多多店铺没有成交,原因是什么
  19. 老虎过河编程java_Java编程实例:青蛙过河程序及其解析
  20. 谭浩强《C++面向对象程序设计》知识点总结

热门文章

  1. themleft模板库_Thymeleaf模板引擎常用总结
  2. 葫芦岛市一高中2021年高考成绩查询表,2021年葫芦岛高考状元多少分是谁,葫芦岛高考状元名单资料...
  3. 腾讯 java_2019腾讯的面试题(腾讯qq音乐部门)
  4. 思维导图一定要用计算机来完成吗,计算机绘制思维导图有什么优势
  5. 蓝桥杯--算法入门级题目及答案解析
  6. 网络流--最大流--Dinic模板矩阵版(当前弧优化+非当前弧优化)
  7. 机器学习线性回归学习心得_机器学习中的线性回归
  8. 深入浅出SQL(2)——select、update…
  9. 嵌入式软件开发必看书籍推荐(C/C++、linux、软件开发)
  10. 王重敏的“中国主义”