题意,很简单,给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. 初涉A*剪枝

    挖坑防忘,天亮补题解. #include <algorithm> #include <iostream> #include <cstring> #include & ...

  2. 解决Eclipse自己主动补充问题空间

    假设我们使用增强的战斗有时当代码完成功能 String ss时却发挥String ssString; Integer i 但打了 Integer integer; 很麻烦. 为这包的关系 org.ec ...

  3. 进程控制之更改用户ID和组ID

    在UNIX系统中,特权(例如能改变当前日期的表示法以及访问控制(例如,能否读.写一特定文件))是基于用户ID和组ID的.当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己的用户I ...

  4. IIS8无法调用Oracle.DataAccess .dll问题

    之前在.net平台下操作Oracle都是用的oracle.dataaccell.dll引用,但是服务器升级为II8后,发布的新服务有关Oracle数据库部分都无法运行,调试了好久发现是IIS8不支持低 ...

  5. TCP/IP协议原理与应用笔记14:电路交换 和 分组交换

    1. 电路交换: (1)建立连接 (2)数据传输 (3)拆除连接 2. 分组交换 (1)数据报: 根据网络的特性,将数据报分成不同大小的部分,经过不同网路传递到相同的目的地.如下: 这里A--X  和 ...

  6. mysql数据库时间、字符串类型互转

    时间格式转换: select DATE_FORMAT(NOW(),"%y-%m-%d %H:%i:%s") 字符串转时间: select STR_TO_DATE("201 ...

  7. Unity3D 之UGUI 图片

    这里来降价下Unity3Dl的图片 先创建一个图片 图片的属性 Preserve Aspect -->保持图片的原始宽高比例 Set native Size -->图片原始尺寸 Image ...

  8. android.util.AndroidRuntimeException: requestFeature() must be called before adding content解决办法

    最近在学习第一行代码这本书,里面的关于activity生命周期有一段例子,但是我自己用mac上装的as运行一直出问题,看log的话就是android.util.AndroidRuntimeExcept ...

  9. SQL Server调优系列基础篇 - 并行运算总结(一)

    前言 上三篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符.联合运算符的优化技巧. 本篇我们分析SQL Server的并行运算,作为多核计算机盛行的今天,SQL Server也会适时调整自 ...

  10. SQL的update from 理解

    学习了sql的语句都有快3年,工作上使用都一年半的,最近突然想起update from语句,感觉好像很模糊,虽然语法上使用一直正确,一直都是这样使用,但是就好像不是很明白里面的深处意思. 今天特意测试 ...