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

POJ3714+最近点对

 
阅读更多

只需要特判标记即可

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps = 1e-8;
const double inf = 9999999999.0;
const int maxn =  100005;
struct Point{
	double x,y;
	int flag;
};
Point pnt[ maxn<<1 ],temp[ maxn<<1 ];
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 ){
		if( pnt[L].flag==pnt[R].flag )
			return inf;
		else
			return dis( pnt[L],pnt[R] );
	}
	int mid = (L+R)/2;
	double res,Ldis,Rdis;
	Ldis = solve( L,mid );
	Rdis = solve( mid+1,R );
	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];
		}
	}
	sort( temp,temp+cnt,cmpy );
	for( int i=0;i<cnt;i++ ){
		for( int j=i+1;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=0;i<n;i++ ){
			scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
			pnt[i].flag = 1;
		}
		for( int i=n;i<2*n;i++ ){
			scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
			pnt[i].flag = 2;
		}
		sort( pnt,pnt+2*n,cmpxy );
		double Ans = solve( 0,2*n-1 );
		printf("%.3lf\n",Ans);
	}
	return 0;
}


分享到:
评论

相关推荐

    jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c

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

    poj 800+ 题目源代码,多年做题积累

    《POJ 800+题目源代码:多年编程经验的结晶》 在编程的世界里,POJ(Programming Online Judge)是一个备受程序员喜爱的在线评测系统,它提供了大量的算法题目供用户挑战,以提升编程技能和算法理解能力。这份"poj ...

    POj最接近点对问题

    POJ 最接近点对问题 ACM北大 using namespace std; struct Point { float x; float y; };

    POJ2186-Popular Cows【Tarjan+极大强连通分量+缩点】

    POJ2186-Popular Cows ...【Tarjan+极大强连通分量+缩点】 解题报告+AC代码 http://hi.csdn.net/!s/BGDH68 附:我所有的POJ解题报告链接 . http://blog.csdn.net/lyy289065406/article/details/6642573

    poj2775.rar_poj_poj 27_poj27_poj2775

    标签"poj poj_27 poj27 poj2775"进一步确认了这是一道关于POJ平台的编程挑战,其中"poj_27"可能是表示第27类问题或者某种分类,而"poj27"可能是对"poj2775"的简写。 压缩文件中的"www.pudn.com.txt"可能是一个链接...

    POJ 新手题目+部分难题 基本数论+图论+组合数学

    2505 2521 2538 2546 2551 2590 2593 2601 2665 2680 2739 2752 2761 2762 2777 2800 2891 2893 2992 3030 3041 3132 3159 3187 3204 3270 3277 3281 3297 3321 3414 3436 3461 3650 3663 3664 3672 3740

    POJ算法题目分类

    POJ 算法题目分类是指分类所有 POJ 题目的算法思想和解决方案,本文将对算法分类进行详细的介绍。 一、基本算法 基本算法是指最基础的算法思想,如枚举、贪心、递归和分治法、递推、构造法、模拟法等。这些算法...

    POJ.rar_poj java_poj1048

    【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...

    POJ2002-Squares

    【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...

    POJ1159-Palindrome

    【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...

    poj题目分类

    下面是POJ题目分类的详细知识点总结: 初级 1. 基本算法: * 枚举法:通过枚举所有可能的解来解决问题,例如 poj1753、poj2965。 * 贪心算法:通过选择当前最优的解决方案来解决问题,例如 poj1328、poj2109、...

    POJ1426-Find The Multiple【BFS+同余模】

    【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...

    hdu oj poj 题目代码与详解

    下面将详细介绍这些知识点: 1. **在线判题系统**: HDU OJ(Online Judge)和POJ是两种流行的在线编程竞赛平台。用户可以在这些平台上提交自己的代码,系统会自动运行并判断代码是否正确解答了给定的问题。这种...

    POJ1201-Intervals

    "POJ1201-Intervals.doc" 可能是一个文档文件,包含了对问题的详细解析、解题思路、算法分析以及代码解释。文档通常会更注重逻辑性和可读性,帮助读者理解问题的本质和解决方案的步骤。 结合以上信息,我们可以推测...

    POJ3009-Curling 2.0【DFS+Vector+回溯+剪枝】

    北京大学在线编程平台上的POJ3009题目名为"Curling 2.0",它是一道涉及到算法与数据结构的复杂问题,主要考察了参赛者对深度优先搜索(DFS)、向量(Vector)操作、回溯法以及剪枝策略的掌握程度。本题的解决方案...

    ACM-POJ 算法训练指南

    根据给定的文件信息,以下是对“ACM-POJ算法训练指南”的详细解析与相关知识点的归纳: ### 一、基本算法 1. **排序**:包括了基础的排序算法,如快速排序(poj1753, poj2965),是算法学习的基础。 2. **搜索**:...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    根据提供的信息,我们可以总结出以下相关的IT知识点,主要聚焦于编程竞赛中的算法和技术: ### POJ分类概述 ...以上提到的知识点仅为部分分类,POJ平台还包含了更多类型的题目,供有兴趣的人士进一步探索和学习。

    poj各种分类

    标题和描述中的“poj各种分类”主要指向的是在POJ(Peking University Online Judge)平台上,根据解题策略和算法类型对题目进行的分类。POJ作为一个知名的在线编程平台,提供了大量的算法练习题,适合从初学者到...

    poj训练计划.doc

    - 最短路径算法:如Dijkstra算法和Bellman-Ford算法,用于找到两点间的最短路径,如`poj1062, poj2253`。 - 最小生成树算法:如Prim算法和Kruskal算法,用于找出图中的最小生成树,如`poj1789, poj2485`。 - 拓扑...

    西北工业大学POJ试题C++答案代码+课程设计

    "西北工业大学POJ试题C++答案代码+课程设计"这一标题表明了资源的主要内容,涉及两个核心部分:一是西北工业大学的编程竞赛(POJ,Problem Oriented Judge System)的C++解题代码,二是与这些题目相关的课程设计。...

Global site tag (gtag.js) - Google Analytics