题目连接:hdu_1007_Quoit Design

题意:

给你平面上的一些点,让你找出这些点的最近点对的距离

题解:
采用分治,达到O(nlognlogn)的时间复杂度就能艹过去了

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<math.h>
 5 using namespace std;
 6 //O(nlognlogn)找最近点对
 7 const int N=1e5+7;
 8 struct TPoint
 9 {
10     double x,y;
11 }ply[N],ans[N];
12 int n;
13 inline double MIN(double a,double b) {return a<b?a:b;}
14 bool cmpx(TPoint a,TPoint b) {return a.x<b.x;}
15 bool cmpy(TPoint a,TPoint b) {return a.y<b.y;}
16 double dist(TPoint a,TPoint b)
17 {
18     double s1=a.x-b.x;
19     double t1=a.y-b.y;
20     return sqrt(s1*s1+t1*t1);
21 }
22 double closest(int l,int r)
23 {
24     if(l+1==r) return dist(ply[l],ply[r]);//2点
25     else if(l+2==r)//三点
26         return MIN(dist(ply[l],ply[l+1]),MIN(dist(ply[l],ply[r]),dist(ply[l+1],ply[r])));
27     int i,j,mid,cnt;
28     mid=(l+r)>>1;
29     double mi=MIN(closest(l,mid),closest(mid+1,r));//递归解决
30     for(i=l,cnt=0;i<=r;i++)//相邻点符合
31     {
32         if(fabs(ply[i].x-ply[mid].x)<=mi)
33             ans[cnt++]=ply[i];
34     }
35     sort(ans,ans+cnt,cmpy);//按y排序
36     for(i=0;i<cnt;i++)for(j=i+1;j<cnt;j++)//更新最小距离
37     {
38         if(ans[j].y-ans[i].y>=mi) break;
39         mi=MIN(mi,dist(ans[i],ans[j]));
40     }
41     return mi;
42 }
43 int main()
44 {
45     while(scanf("%d",&n),n)
46     {
47         int i;
48         for(i=0;i<n;i++) scanf("%lf%lf",&ply[i].x,&ply[i].y);//输入点
49         sort(ply,ply+n,cmpx);//按x排序
50         double mi=closest(0,n-1);
51         printf("%.2lf\n",mi/2);
52     }
53     return 0;
54 }

View Code

转载于:https://www.cnblogs.com/bin-gege/p/5696074.html

hdu_1007_Quoit Design(最近点对)相关推荐

  1. HDU 1007Quoit Design(最近点问题)

    最近点问题:二维平面中有n(n很大)个点,求出距离最近的两个点思路:因为n的值很大,所以暴力和dp都行不通了吧!分治法就挺好的.将区间一半一半的分开,直到分成只有一个点或两个点的时候!对于只有两个点的 ...

  2. HDU1007 Quoit Design 分治+递归

    点击打开链接 Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  3. HDU.1007 Quoit Design

    文章目录 一.题目解读 1.原题 2.分类 3.题意 4.输入输出格式 5.数据范围 二.题解参考 1.总体思路 2.思路② (1).分析 (2).AC代码 三.总结与后话 1.评价 2.后话 一.题 ...

  4. (nlogn)的时间复杂度求 最近点对 hdu 1007 凹凸曼与小怪兽的故事 poj3714 Raid...

    hdu 1007  Quoit Design http://acm.hdu.edu.cn/showproblem.php?pid=1007 zoj 2107 Quoit Design http://a ...

  5. HDU1007(Quoit Design)

    Quoit Design 题目传送门 Problem Description Have you ever played quoit in a playground? Quoit is a game i ...

  6. 激光雷达Lidar Architecture and Lidar Design(下)

    激光雷达Lidar Architecture and Lidar Design(下) Considerations on Lidar Design 双基地还是单基地? 双轴还是同轴? 几何重叠 向上还 ...

  7. 激光雷达Lidar Architecture and Lidar Design(上)

    激光雷达Lidar Architecture and Lidar Design(上) 介绍 激光雷达结构: 基本条件 构型和基本布置 激光雷达设计: 基本思想和基本原则 总结 介绍 激光雷达结构是激光 ...

  8. 安卓Design包之AppBar和Toolbar的联用

    前面讲了Design包的的CoordinatorLayout和SnackBar的混用,现在继续理解Design包的AppBar; AppBarLayout跟它的名字一样,把容器类的组件全部作为AppB ...

  9. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

最新文章

  1. fastjson反序列化多层嵌套泛型类与java中的Type类型
  2. fiddler和xampp安装成功后,网站打不开的原因
  3. ftp在命令行状态下下载跟上传东西
  4. STM32F0xx_SPI读写(Flash)配置详细过程
  5. pandas 学习(二)—— pandas 下的常用函数
  6. thread_LockSupport
  7. 人工智能将是人类最后的需要 | 大咖来了
  8. 汽车编程都是用matlab,MATLAB编程与汽车仿真应用
  9. 企业多园区统一灾备建设最佳实践
  10. 爱玩软件 | win10桌面美化
  11. 加密 CryptoJS DES
  12. smartupload java_smartupload实现文件上传
  13. 二层交换机和三层交换机的区别
  14. Win10要是个人,也算是鬼门关走过一遭了 1
  15. C语言学习--01 认识数据类型
  16. 编写解析绝对定向程序matlab,相对定向和绝对定向解析过程(全面).ppt
  17. 宝塔面板网站一打开cpu百分百_解决宝塔面板CPU占满100%,负载100%网站缓慢等问题...
  18. 关于对vue-particle-effect-button的使用
  19. synplify pro 201203分享下载
  20. 智慧消防让生活更加便利

热门文章

  1. 【问链-链改进行时】 第二课 链改的技术架构选择
  2. 区块链创业的成功范式,人工智能不得不学
  3. linux日志绕接,[判断题] 绕接式保安接线排按结构分为固定式和旋转式。
  4. python对城市规划_Python对城市距离自动化爬取【必学小型项目】
  5. php bindresult,mysqli_stmt::bind_result
  6. thinkphp mysql类_PHP封装类似thinkphp连贯操作数据库的Db类(简单版)
  7. thymeleaf 获取yml中的值_SpringBoot引入Thymeleaf
  8. 自媒体敏感词大全_2020年自媒体软件大全,这里真的有大宝贝……
  9. linux neo4j 服务器,如何在linux服务器上配置Neo4j · Digital World
  10. linux bash文件,linux之bash配置文件