POJ3714+最近点对
特判标记即可
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps = 1e-;
const double inf = 9999999999.0;
const int maxn = ;
struct Point{
double x,y;
int flag;
};
Point pnt[ maxn<< ],temp[ maxn<< ];
double dis( Point a,Point b ){
return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) );
}
int cmpxy( Point a,Point b ){
if( a.x!=b.x )
return a.x<b.x;
else
return a.y<b.y;
}
int cmpx( Point a,Point b ){
return a.x<b.x;
}
int cmpy( Point a,Point b ){
return a.y<b.y;
}
double solve( int L,int R ){
if( L==R )
return inf;
if( L+==R ){
if( pnt[L].flag==pnt[R].flag )
return inf;
else
return dis( pnt[L],pnt[R] );
}
int mid = (L+R)/;
double res,Ldis,Rdis;
Ldis = solve( L,mid );
Rdis = solve( mid+,R );
res = min( Ldis,Rdis );
int cnt = ;
for( int i=L;i<=R;i++ ){
if( fabs(pnt[i].x-pnt[mid].x)<=res ){
temp[cnt++] = pnt[i];
}
}
sort( temp,temp+cnt,cmpy );
for( int i=;i<cnt;i++ ){
for( int j=i+;j<cnt;j++ ){
if( fabs( pnt[i].y-pnt[j].y )>res ) break;
if( pnt[i].flag==pnt[j].flag ) continue;
res = min( res,dis(pnt[i],pnt[j]) );
}
}
return res;
} int main(){
int ca;
scanf("%d",&ca);
while( ca-- ){
int n;
scanf("%d",&n);
for( int i=;i<n;i++ ){
scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
pnt[i].flag = ;
}
for( int i=n;i<*n;i++ ){
scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
pnt[i].flag = ;
}
sort( pnt,pnt+*n,cmpxy );
double Ans = solve( ,*n- );
printf("%.3lf\n",Ans);
}
return ;
}
POJ3714+最近点对的更多相关文章
- poj3714 Raid(分治求平面最近点对)
题目链接:https://vjudge.net/problem/POJ-3714 题意:给定两个点集,求最短距离. 思路:在平面最近点对基础上加了个条件,我么不访用f做标记,集合1的f为1,集合2的f ...
- 【POJ3714】Raid:平面最近点对
Description After successive failures in the battles against the Union, the Empire retreated to its ...
- $Poj3714/AcWing\ Raid$ 分治/平面最近点对
$AcWing$ $Sol$ 平面最近点对板子题,注意要求的是两种不同的点之间的距离. $Code$ #include<bits/stdc++.h> #define il inline # ...
- POJ-3714 Raid 平面最近点对
题目链接:http://poj.org/problem?id=3714 分治算法修改该为两个点集的情况就可以了,加一个标记... //STATUS:C++_AC_2094MS_4880KB #incl ...
- 【poj3714】 Raid
http://poj.org/problem?id=3714 (题目链接) 现在才搞平面最近点对..感觉有点尴尬 题意 给出平面上两组点,每组n个,求两组点之间最短距离 Solution1 平面最近点 ...
- 『Raid 平面最近点对』
平面最近点对 平面最近点对算是一个经典的问题了,虽然谈不上是什么专门的算法,但是拿出问题模型好好分析一个是有必要的. 给定\(n\)个二元组\((x,y)\),代表同一平面内的\(n\)个点的坐标,求 ...
- ICP算法(Iterative Closest Point迭代最近点算法)
标签: 图像匹配ICP算法机器视觉 2015-12-01 21:09 2217人阅读 评论(0) 收藏 举报 分类: Computer Vision(27) 版权声明:本文为博主原创文章,未经博主允许 ...
- Quoit Design---hdu1007(最近点对问题 分治法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:给你n(2<=n<=10^6)个点的坐标,然后找到两个点使得他们之间的距离最小 ...
- 求空间内两条直线的最近距离以及最近点的坐标(C++)
关键词:空间几何 用途:总有地方会用到吧 文章类型:C++函数展示 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-19 @Lab: CvLab20 ...
随机推荐
- Linux 查看文件修改
在以前知道在Linux下查看Tomcat日志文件, tail -f catalina.out 同样的命令"tail -f filename",我就可以看其它日志文件啦: tail ...
- css3过度和动画
一.过度(transition) transition:[transition-property] || [transition-duration] || [transition-timing-fun ...
- 使用MVCJqGrid的心得
最近公司网站进行升级,项目要用.net mvc,mysql和轻量级orm框架dapper.由于美工页面出不来啊,让我先写简单写写后台的列表,同事说用MvcJqGrid,也得到了架构的同意. 可是不得不 ...
- poj3660 Cow Contest(Floyd-Warshall方法求有向图的传递闭包)
poj3660 题意: 有n头牛, 给你m对关系(a, b)表示牛a能打败牛b, 求在给出的这些关系下, 能确定多少牛的排名. 分析: 在这呢先说一下关系闭包: 关系闭包有三种: 自反闭包(r), 对 ...
- 我的MFC学习之路(一)
因为项目需求,我开始应用MFC写程序.具体接触MFC的时间大概也有两个月了.现在的水平算是刚刚踏入了MFC大门的半只脚.目前能基本使用MFC Class Wizard,可以根据实例仿照完成需求,小范围 ...
- PHP使用缓存生成静态页面
http://www.cnblogs.com/lh460795/archive/2013/04/06/3003105.html 在apache / bin/ab.exe 可以做压力测试,该工具可以模 ...
- c#转义字符串中的所有正则特殊字符
/// <summary> /// 转义字符串中所有正则特殊字符 /// </summary> /// <param name="input"> ...
- SAX方式解析XML文件实例
books.XML文件: 书籍book.java实体类: public class Book { private String id; private String name; private Str ...
- 【开发】Form 表单 Linkbutton 禁用
在权限判定中,对于无权限操作的按钮可直接隐藏($.hide()). HTML 定义 <a id="btnPreAssign_GeneralTasks" class=" ...
- PHP学习笔记——上传文件到服务端的文件夹下
环境 开发包:appserv-win32-2.5.10 服务器:Apache2.2 数据库:phpMyAdmin 语言:php5,java 平台:windows 10 需求 编写一个PHP脚本页面,可 ...