题意,很简单,给n个点的坐标,求距离最近的一对点之间距离的一半。

第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标。实数。

这个题目其实就是求最近点对的距离

 

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std; //①按照每个点 x 值由小到大进行排序,若 x 相同,则按照 y 由小到大进行排序,计算相邻两点的最短距离,即为len1。
//②按照每个点 y 值由小到大进行排序,若 y 相同,则按照 x 由小到大进行排序,计算相邻两点的最短距离,即为len2。
//答案即为:min(len1,len2)。 struct Point
{
double x;
double y;
}coor[100001]; bool cmp1(const Point a,const Point b)
{
if(a.x<b.x)
return true;
if(a.x>b.x)
return false;
else
return a.y<b.y;
} bool cmp2(const Point a,const Point b)
{
if(a.y<b.y)
return true;
if(a.y>b.y)
return false;
else
return a.x<b.x;
} double num(int i,int j)
{
return sqrt( pow( (coor[i].x-coor[j].x),2 ) + pow( (coor[i].y-coor[j].y),2 ) ); //计算两点之间的距离
} int main()
{
double radius=0; //定义半径
int i,N;
while(scanf("%d",&N) && N!=0) //N大于2小于100000
{
for(i=1 ; i<=N ; i++)
scanf("%lf %lf",&coor[i].x , &coor[i].y);
sort(coor+1,coor+N+1,cmp1); //先排x轴
radius=num(1,2);
for(i=2;i<N;i++)
{
if( radius>num(i,i+1) )
radius=num(i,i+1);
}
sort(coor+1,coor+N+1,cmp2); //再排y轴
for(i=1;i<N;i++)
{
if( radius>num(i,i+1) )
radius=num(i,i+1);
}
printf("%.2f\n",radius/2);
}
return 0;
} sort函数:

firstlast

分别指向被排序序列中初始及末尾位置的随机访问迭代器(Random-access Iterators)。这个范围即 [first,last) ,包括 first 到 last 间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。

comp

二元谓词(Binary)函数,以两个元素为参数,然后返回一个可转换成 bool 类型的值。

其返回值表明按所指定的严格弱序排序(Strict weak ordering)时,第一个参数所传进来的元素是否在第二个参数所传进来的元素前面。

该函数不能修改其参数。

可以是函数指针(Function pointer)类型或函数对象(Function object)类型。

hdu10007的更多相关文章

随机推荐

  1. Nginx入门之两种handler函数的挂载方式

    请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 接着上次的文章,今天研究<深入理解Nginx模块开发与架构解析>一书中给出的mytest的例子,发现和 /tengine.t ...

  2. css z-index详解

    写css z-index的时候经常会出现很多莫名其妙的问题,下面对z-index属性做彻底的剖析,本文参考了<一个css中z-index的用法>,并做了很多demo,方便了解z-index ...

  3. mysql优化之连接优化

    Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 连接优化 连接优化主要指客户端连接数据库以及 ...

  4. mysql.cnf 配制文件详解

    代码如下: [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedi ...

  5. C# - 系统类 - String类

    String类 ns:System String类封装了一系列不能被改变的Unicode字符序列 字符属于引用类型 但它又具有值类型的行为 固定不变意味着 一旦在托管堆中分配了一块内存来存储字符 字符 ...

  6. Linux运维工程师成长必经之路

    本路线图是从0基础开始,全方位由浅入深,按照多年Linux培训经验和优秀教学方法制定的学习思路和学习方法,路线图包括初级入门.中级进阶.高级提升和资深冲刺四个阶段,每阶段对应着不同优秀的课程和学习方法 ...

  7. sql快速生成大量数据

    先插入一条数据 insert into table(a,b,c,d) values(1,2,3,4) 然后重复执行以下sql语句 没执行一次 数据就会倍增 insert into table(a,b, ...

  8. 使用JUnit4与JMockit进行打桩测试

    1. 何为Mock 项目中各个模块,各个类之间会有互相依赖的关系,在单元测试中,我们只关心被测试的单元,对于其依赖的单元并不关心(会有另外针对该单元的测试). 比如,逻辑层A类依赖了数据访问层B类的取 ...

  9. Openfire3.8.2在eclipse中Debug方式启动最简单的方式

    一.前言 最近打算研究一下Openfire,于是打算最好能够以Debug方式启动Openfire的Server,到网上一搜,还果真早到官网的一篇文章来: http://community.ignite ...

  10. 利用php给图片添加文字水印--面向对象与面向过程俩种方法的实现

    1: 面向过程的编写方法 //指定图片路径 $src = '001.png'; //获取图片信息 $info = getimagesize($src); //获取图片扩展名 $type = image ...