`
xxx0624
  • 浏览: 31692 次
文章分类
社区版块
存档分类
最新评论

HDU1007+最近点对

 
阅读更多

模板题,不解释。

#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;
}


分享到:
评论

相关推荐

    ACM HDU题目分类

    1007 经典问题,最近点对问题,用分治;1017 简单数学题;1018 简单数学题;1019 简单数学题 等等。 字符串处理 字符串处理是 ACM HDU 题目分类中的一大类,例如,1020 简单的字符串处理;1048 简单字符串处理;...

    HDU题目分类

    下面是对题目分类的详细知识点解释: 1. 整数求和(1001):本题目是关于整数求和的基本概念,需要使用循环语句来解决问题。 知识点:循环语句、整数求和 2. C 语言实验题——两个数比较(1002):本题目是关于...

    hdu题目分类

    本篇将对“hdu题目分类”中提及的各种类型问题进行详细介绍,旨在帮助读者更好地理解这些题目所涉及的核心概念和技术点,并为编程竞赛中的实战训练提供参考。以下是对每道题目的具体分析: 1. **1001 整数求和** ...

    hdu 一些简单题目 ac代码

    从提供的文件名来看,这些是针对HDU题目的C++源代码文件,具体题目编号包括1007、10071、10072、10073、2469、24401、2440、11601、1005和1004。每个题目可能涉及不同的算法和编程技术,让我们逐一探讨这些题目可能...

    hdu 汉诺塔

    ### ACM HDU 汉诺塔 递归练习 #### 概述 汉诺塔(Hanoi Tower)问题是一个经典的递归算法示例,在计算机科学...通过对汉诺塔问题及其变种的研究和练习,不仅可以加深对递归算法的理解,还能培养解决实际问题的能力。

    jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c

    通常,这类题目会涉及平面几何中的点、线、圆等基本元素,可能需要求解交点、最近距离等问题。解决这类问题时,熟悉平面直角坐标系中的几何运算,如距离公式、向量操作等是必要的。同时,对于编程,可能需要掌握...

    kuangbin的ACM模板

    平面最近点对(HDU1007) - **问题描述**:给定平面上的一组点,找到距离最近的两点。 - **算法思想**:通过分治法实现,将点集分为左右两部分,分别求出左右两侧的最近点对,然后再寻找跨越这两部分的最近点对。 -...

    hdoj解题代码

    以下是对每个题目及其可能涉及的编程知识点的详细解析: 1. 1011.cpp: 这个文件可能包含了对问题1011的解决方案。虽然具体的题目内容未知,但根据HDU Online Judge的习惯,这可能是一个基础的算法问题,如排序、...

    杭电1000到1050 acm解题报告

    【描述】"http://acm.hdu.edu.cn/"是杭电ACM在线判题系统的网址,这个平台为程序员和竞赛爱好者提供了大量的编程题目,支持多种编程语言,用户可以提交自己的解决方案并获得即时的评测结果。这个解题报告可能包含了...

    JSU_动态规划_dp1

    最基础的DP题目解题报告,适合初学者!动态规划(DP1) http://acm.hdu.edu.cn/diy/contest_show.php?cid=20151 ... 1006 免费馅饼 1007 Humble Numbers1008 Monkey and Banana 1009 龟兔赛跑 1010 数塔

    leetcode中国-ACM-Learning:ACM竞赛中关于算法的代码

    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...

    leetcode中国-Homo-sapiens-ACM-Learning:智人-ACM-学习

    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的代码实现

    本资料集合了来自acm.hdu.edu.cn网站上的143道AC(Accepted)题目,覆盖了丰富的算法类型和编程技巧,是初学者宝贵的实践资源。 1. **基础算法**:从文件名称如"1007.cpp"、"10022.cpp"等可以看出,这些代码涵盖了...

Global site tag (gtag.js) - Google Analytics