模板题,不解释。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
using namespace std;
const double eps = 1e-8;
const int maxn = 100005;
const double inf = 9999999999.0;
struct Point {
double x,y;
};
struct Line{
Point a,b;
};
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+1==R )
return dis( pnt[L],pnt[R] );
int mid = (L+R)/2;
double Ldis,Rdis;
Ldis=solve( L,mid );
Rdis=solve( mid+1,R );
double res = min( Ldis,Rdis );
int cnt = 0;
for( int i=L;i<=R;i++ ){
if( fabs( pnt[i].x-pnt[mid].x )<=res ){
temp[ cnt++ ] = pnt[i];
}
}//分离出宽度为RES的点
sort( temp,temp+cnt,cmpy );
for( int i=0;i<cnt;i++ ){
for( int j=i+1;j<cnt;j++ ){
if( fabs(temp[i].y-temp[j].y)>res ) break;
res = min( res,dis(temp[i],temp[j]) );
}
}
return res;
}
int main(){
int n;
while( scanf("%d",&n),n ){
for( int i=0;i<n;i++ )
scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
sort( pnt,pnt+n,cmpxy );
double Ans = solve( 0,n-1 );
printf("%.2lf\n",Ans/2.0);
}
return 0;
}
分享到:
相关推荐
1007 经典问题,最近点对问题,用分治;1017 简单数学题;1018 简单数学题;1019 简单数学题 等等。 字符串处理 字符串处理是 ACM HDU 题目分类中的一大类,例如,1020 简单的字符串处理;1048 简单字符串处理;...
下面是对题目分类的详细知识点解释: 1. 整数求和(1001):本题目是关于整数求和的基本概念,需要使用循环语句来解决问题。 知识点:循环语句、整数求和 2. C 语言实验题——两个数比较(1002):本题目是关于...
本篇将对“hdu题目分类”中提及的各种类型问题进行详细介绍,旨在帮助读者更好地理解这些题目所涉及的核心概念和技术点,并为编程竞赛中的实战训练提供参考。以下是对每道题目的具体分析: 1. **1001 整数求和** ...
从提供的文件名来看,这些是针对HDU题目的C++源代码文件,具体题目编号包括1007、10071、10072、10073、2469、24401、2440、11601、1005和1004。每个题目可能涉及不同的算法和编程技术,让我们逐一探讨这些题目可能...
### ACM HDU 汉诺塔 递归练习 #### 概述 汉诺塔(Hanoi Tower)问题是一个经典的递归算法示例,在计算机科学...通过对汉诺塔问题及其变种的研究和练习,不仅可以加深对递归算法的理解,还能培养解决实际问题的能力。
通常,这类题目会涉及平面几何中的点、线、圆等基本元素,可能需要求解交点、最近距离等问题。解决这类问题时,熟悉平面直角坐标系中的几何运算,如距离公式、向量操作等是必要的。同时,对于编程,可能需要掌握...
平面最近点对(HDU1007) - **问题描述**:给定平面上的一组点,找到距离最近的两点。 - **算法思想**:通过分治法实现,将点集分为左右两部分,分别求出左右两侧的最近点对,然后再寻找跨越这两部分的最近点对。 -...
以下是对每个题目及其可能涉及的编程知识点的详细解析: 1. 1011.cpp: 这个文件可能包含了对问题1011的解决方案。虽然具体的题目内容未知,但根据HDU Online Judge的习惯,这可能是一个基础的算法问题,如排序、...
【描述】"http://acm.hdu.edu.cn/"是杭电ACM在线判题系统的网址,这个平台为程序员和竞赛爱好者提供了大量的编程题目,支持多种编程语言,用户可以提交自己的解决方案并获得即时的评测结果。这个解题报告可能包含了...
最基础的DP题目解题报告,适合初学者!动态规划(DP1) http://acm.hdu.edu.cn/diy/contest_show.php?cid=20151 ... 1006 免费馅饼 1007 Humble Numbers1008 Monkey and Banana 1009 龟兔赛跑 1010 数塔
1007 专题分类 (一)简单搜索 ID Problem C++ Source 1 HDU 2553 (精简版) 2 HDU 1312 3 POJ 3984 4 POJ 2251 5 POJ 3278 6 POJ 3279 7 ZOJ 1002 8 POJ 1321 9 HDU 1241 (二)树 ID Problem C++ Source 1 LeetCode 100...
1007 专题分类 (一)简单搜索 ID Problem C++ Source 1 HDU 2553 (精简版) 2 HDU 1312 3 POJ 3984 4 POJ 2251 5 POJ 3278 6 POJ 3279 7 ZOJ 1002 8 POJ 1321 9 HDU 1241 (二)树 ID Problem C++ Source 1 LeetCode 100...
本资料集合了来自acm.hdu.edu.cn网站上的143道AC(Accepted)题目,覆盖了丰富的算法类型和编程技巧,是初学者宝贵的实践资源。 1. **基础算法**:从文件名称如"1007.cpp"、"10022.cpp"等可以看出,这些代码涵盖了...