hdu1007网上资料分析

#include<stdio.h>
#include<cmath>
#include<iostream>
#include<algorithm>
#define N 50000000;

using namespace std;

//下面的结构体名称一定要有,(node),结构体的数据类型一定是double,之前写的时候是int,肯定是错的。结构体末尾定义了结构体数组;

struct node  
{  
  double x;  
  double y;  
}p[100005];  
int a[100005]; 
int n;
double min(double a,double b)
{
return a<b?a:b;
}
bool cmpx(node a,node b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
bool cmpy(int a,int b)
{
return p[a].y<p[b].y;
}
double getDis(node a,node b)
{
double xx=a.x-b.x;
double yy=a.y-b.y;
return sqrt(xx*xx+yy*yy);
}
double find(int lt,int rt)
{
if(lt+1==rt) return getDis(p[lt],p[rt]);
if(lt+2==rt) return min(getDis(p[lt],p[lt+1]),min(getDis(p[lt+1],p[rt]),getDis(p[rt],p[lt])));
int mid=(lt+rt)/2;

double ans=min(find(lt,mid),find(mid+1,rt));

 //这里的cnt一定,一定,一定要初始化,从这里可以反思出,如果定义一个变量,首先一定要考虑需不需要进行初始化,或者可能导致空指针

//而且这个在编译链接的时候不会报错,只有运行的 时候才可能会被发现。所以定义变量的时候一定要进行初始化。

int i,j,cnt=0;
//cout<<"hhhhhhhhhhhhhhhhhhh="<<cnt<<endl;
for(i=lt;i<=rt;i++)
{
if(p[i].x-p[mid].x<ans&&p[mid].x-p[i].x<ans)
{
a[cnt++]=i;
}
}
sort(a,a+cnt,cmpy);
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
if(p[a[j]].y-p[a[i]].y>=ans) break;
ans=min(ans,getDis(p[a[i]],p[a[j]]));
}
}
return ans;


}
int main()
{
int i;  
     
    while(scanf("%d",&n)!=EOF)  
    {  
      if(!n) break;  
      for(i=0;i<n;i++)  
       scanf("%lf %lf",&p[i].x,&p[i].y);  
      sort(p,p+n,cmpx);  
      printf("%.2lf%\n",find(0,n-1)/2);  
    } 
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值