题意,很简单,给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. [Android]Fragment源代码分析(二) 状态

    我们上一讲,抛出来一个问题,就是当Activity的onCreateView的时候,是怎样构造Fragment中的View參数.要回答这个问题我们先要了解Fragment的状态,这是Fragment管 ...

  2. HTML中Select的使用具体解释

    <html> <head> <SCRIPT LANGUAGE="JavaScript"> <!-- //oSelect 列表的底部加入了一 ...

  3. 理解 MEF

    1.它解决什么问题? 考虑下面的需求,甲程序员对外暴露接口,内部提供实现.乙程序员使用甲提供的接口,根据面向接口编程的原则,乙关联一个接口类型的引用.正常情况下,乙要使用甲的实现,必须实例化一个具体对 ...

  4. 安装SQL Server提示“重叠的IO操作正在进行”解决

    单位新做了一个虚机.打算部署一套.Net SQL 的系统 系统是Server 2008 R2,机器除了系统,其它软件都没有. 所以须要安装SQL Server啊,.Net环境啊.配置IIS== 恰巧的 ...

  5. 解决Android拍照保存在系统相册不显示的问题

    可能大家都知道我们保存相册到Android手机的时候,然后去打开系统图库找不到我们想要的那张图片,那是因为我们插入的图片还没有更新的缘故,先讲解下插入系统图库的方法吧,很简单,一句代码就能实现 Med ...

  6. SoundPool没有声音的问题

    在项目中需要播放一个提示,很短的一个声音,Android中播放声音有两种方式:MediaPlayer和SoundPool.相对来说SoundPool比较轻量级一些,多用在播放比较短急的声音,Media ...

  7. vim字符编码设置

    vim 编码方式的设置 和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux ...

  8. Java client 访问 memcached

    在测试项目中引入了memcached作为缓存层,以下是memcached的缓存配置和调用过程. linux下memcached安装过程 直接参考以前的博文linux下安装memcached过程  不再 ...

  9. "ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法

    引自:http://hi.baidu.com/fynaa/item/c2978952d8d542dfd48bacf6 讲了一大堆: 综合下: 解决方案:select session_id from v ...

  10. 20151216JqueryUI学习笔记---按钮

    按钮(button) , 可以给生硬的原生按钮或者文本提供更多丰富多彩的外观. 它不单单可以设置按钮或文本,还可以设置单选按钮和多选按钮.一. 使用 button 按钮使用 button 按钮 UI ...