zoukankan      html  css  js  c++  java
  • hdu1007 最近点对

    题意:
          给你n个点,让你求最近的两个点的距离是多少.
    思路:

          这个题目我没思路,我在网上看的是什么分治 + 鸽巢原理,分治我知道,鸽巢原理我也知道,但是这个题目就是没有证明出来他和鸽巢原理有jm关系,总之就是先以x或者y优先sort一下,然后每次枚举每个相邻点的附近5个就行了(加自己一共六个),而且这个题目的前提好像还是什么数据必须是随机产生的吧,ac可以,但不明白..


    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    
    #define N 100000 + 100
    
    using namespace std;
    
    typedef struct
    {
       double x ,y;
    }NODE;
    
    NODE node[N];
    
    bool camp(NODE a ,NODE b)
    {
       return a.y < b.y || a.y == b.y && a.x < b.x;
    }
    
    double dis(NODE a ,NODE b)
    {
       return (a.x - b.x) *  (a.x - b.x) + (a.y - b.y) *  (a.y - b.y);
    }
    
    int main ()
    {
       int n ,i ,j;
       while(~scanf("%d" ,&n) && n)
       {
          
          for(i = 1 ;i <= n ;i ++)
          scanf("%lf %lf" ,&node[i].x ,&node[i].y);
          sort(node + 1 ,node + n + 1 ,camp);
          double min = 1000000000;
          for(i = 1 ;i <= n ;i ++)
          for(j = i + 1 ;j <= i + 5 && j <= n ;j ++)
          {
             double now = dis(node[i] ,node[j]);
             if(min > now) min = now;
          }
          printf("%.2lf
    " ,sqrt(min)/2);
       }
       return 0;
    }
          
          
          
          
    

  • 相关阅读:
    VS2013 使用QCustomPlot等三方库如何配置
    error LNK1112:模块计算机类型"X64" 与目标计算机类型"X86" 冲突
    Qt 获取屏幕当前分辨率
    流程控制
    导航条和工作内容纪要
    js简介
    高度塌陷
    浮动
    文档流
    display和overflow
  • 原文地址:https://www.cnblogs.com/csnd/p/12063133.html
Copyright © 2011-2022 走看看