[模板]平面最近点对
实现
将平面内点按$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
[模板]平面最近点对相关推荐
- CF429D Tricky Function(求解公式、经分析转为求平面最近点对、思维)
整理的算法模板合集: ACM模板 目录 CF429D Tricky Function 题意实际上就是给定长度为 nnn 的一串序列a1,a2,...,ana_1, a_2,...,a_na1,a2 ...
- POJ3714 Raid 平面最近点对
利用分治来求平面最近点对 只需要查后面6个点就好了 原因在于https://blog.csdn.net/liufeng_king/article/details/8484284 两个集合的话就把不同集 ...
- HDU-4631 Sad Love Story 平面最近点对
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 数据是随机的,没有极端数据,所以可以分段考虑,最小值是一个单调不增的函数,然后每次分治算平面最近 ...
- 平面最近点对问题(分治)
题目描述 在与联盟的战斗中屡战屡败后,帝国撤退到了最后一个据点. 依靠其强大的防御系统,帝国击退了联盟的六波猛烈进攻. 经过几天的苦思冥想,联盟将军亚瑟终于注意到帝国防御系统唯一的弱点就是能源供应. ...
- 平面最近点对问题求解—基于Java语言
平面最近点对问题求解-基于Java语言 1. 问题描述: 本问题来自<编程之美2.11-寻找最近点对>,文中给出了两种解法:暴力解法,分治解法.其中,暴力解法很简单,求出所有点之间的距离并 ...
- 分治法求平面最近点对入门
一.平面最近点对问题. 平面最近点对:在一个平面上有 n n n个点,求出距离最近的两个点. 平面最近点对是计算几何中一个十分经典且基础的问题,通常采用分治法来解决. 二.直线最近点对的分治法. 在用 ...
- HDU 5721 Palace(平面最近点对(分治))
http://acm.hdu.edu.cn/showproblem.php?pid=5721 n个点,去掉一个点的情况下,最近距离平方之和. 平面最近点对模版题,先求出最近距离,然后找到是哪两个点,然 ...
- 【算法分析与设计】平面最近点对(含最近距离、最近点对、第一次分割点集合的输出)
[问题描述] 给定二维平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小.使用递归与分治策略求解二维平面上的最接近点对问题.假设所有点的集合为S,m为S中所有点的x坐标的中 ...
- POJ - 3714 Raid(平面最近点对模板题,几何)
题目链接:点击查看 题目大意:给出两个含有n个点的集合,在两个集合中分别任选一点,使得这两个点之间的距离最小 题目分析:因为n给到了1e5,所以n*n的暴力肯定是不行了,直接从网上copy了个分治优化 ...
最新文章
- php 爬虫去重,浅谈动态爬虫与去重(续)
- Spring+Shiro+CAS整合配置笔记
- 把html追加到指定id后面,javascript – jQuery,动态追加元素时增加id号
- ‘仿微信发表朋友圈’项目中登录功能的业务逻辑
- Spring @Configuration
- window.location.href 跳转失败
- CentOS 6.7编写Shell脚本实现简单跳板机功能
- Spring IOC 之解析Bean:解析 import 标签
- 用人话说说希尔伯特空间??
- 计算机等级考试——四级网络工程师考试大纲
- CC13X0CC26X0EvaluationBoard
- 支付宝公布春节抢红包大数据 金华人全国第五壕
- WinSock网络编程基础(2)客户端
- tensorflow 常遇函数
- 如何实现IP分配、子网划分、和子网掩码计算
- 文件比较 java 标红_如何用java输出word里红色的字体,
- AppBar的WTL实现
- 拓嘉启远电商:拼多多店铺没有成交,原因是什么
- 老虎过河编程java_Java编程实例:青蛙过河程序及其解析
- 谭浩强《C++面向对象程序设计》知识点总结
热门文章
- themleft模板库_Thymeleaf模板引擎常用总结
- 葫芦岛市一高中2021年高考成绩查询表,2021年葫芦岛高考状元多少分是谁,葫芦岛高考状元名单资料...
- 腾讯 java_2019腾讯的面试题(腾讯qq音乐部门)
- 思维导图一定要用计算机来完成吗,计算机绘制思维导图有什么优势
- 蓝桥杯--算法入门级题目及答案解析
- 网络流--最大流--Dinic模板矩阵版(当前弧优化+非当前弧优化)
- 机器学习线性回归学习心得_机器学习中的线性回归
- 深入浅出SQL(2)——select、update…
- 嵌入式软件开发必看书籍推荐(C/C++、linux、软件开发)
- 王重敏的“中国主义”