大致题意:给N个点,求最近点对的距离 d ;输出:r = d/2。

  1. // Time 2093 ms; Memory 1812 K
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #define eps 1e-8
  6. #define maxn 100010
  7. #define sqr(a) ((a)*(a))
  8.  
  9. using namespace std;
  10.  
  11. int sig(double x)
  12. {
  13. return (x>eps)-(x<-eps);
  14. }
  15.  
  16. struct point
  17. {
  18. double x,y;
  19. point(double xx=0,double yy=0):x(xx),y(yy){}
  20. }p[maxn];
  21.  
  22. bool operator < (point a,point b)
  23. {
  24. return a.x<b.x || (a.x==b.x && a.y<b.y);
  25. }
  26. bool cmp(point a,point b)
  27. {
  28. return a.y<b.y || (a.y==b.y && a.x<b.x);
  29. }
  30. double len(point a,point b)
  31. {
  32. return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
  33. }
  34. double min_dis(int l,int r)
  35. {
  36. int i,j,k,s;
  37. double d,mi=-1;
  38. if(r-l<4)
  39. {
  40. for(i=l;i<r;i++) for(j=i+1;j<r;j++)
  41. {
  42. d=len(p[i],p[j]);
  43. if(mi<0 || sig(d-mi)<0) mi=d;
  44. }
  45. return mi;
  46. }
  47. int mid=(l+r)/2;
  48. double minl=min_dis(l,mid);
  49. double minr=min_dis(mid,r);
  50. mi=minl<minr?minl:minr;
  51. for(i=1;i<mid-l && sig(p[mid].x-p[mid-i].x-mi)<0;i++);i--;
  52. for(j=1;j<r-mid && sig(p[mid+j].x-p[mid].x-mi)<0;j++);j--;
  53. sort(p+mid-i,p+mid,cmp);
  54. sort(p+mid,p+mid+j+1,cmp);
  55. int t=mid,flag;
  56. for(k=mid-i;k<mid;k++)
  57. {
  58. flag=1;
  59. for(s=t;s<=mid+j;s++)
  60. {
  61. if(sig(p[k].y-p[s].y)>0)
  62. {
  63. if(sig(p[k].y-p[s].y-mi)>=0) continue;
  64. else
  65. {
  66. if(flag)
  67. {
  68. flag=0;t=s;
  69. }
  70. d=len(p[s],p[k]);
  71. if(sig(d-mi)<0) mi=d;
  72. }
  73. }
  74. else
  75. {
  76. if(sig(p[s].y-p[k].y-mi)>=0) break;
  77. else
  78. {
  79. d=len(p[s],p[k]);
  80. if(sig(d-mi)<0) mi=d;
  81. }
  82. }
  83. }
  84. }
  85. sort(p+mid-i,p+mid+j+1);
  86. return mi;
  87. }
  88.  
  89. int main()
  90. {
  91. int i,n;
  92. while(scanf("%d",&n)!=EOF && n)
  93. {
  94. for(i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
  95. sort(p,p+n);
  96. printf("%.2lf\n",min_dis(0,n)/2);
  97. }
  98. return 0;
  99. }

hdu 1007 Quoit Design(分治法求最近点对)的更多相关文章

  1. hdu 1007 Quoit Design (经典分治 求最近点对)

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...

  2. HDU 1007 Quoit Design【计算几何/分治/最近点对】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. HDU 1007 Quoit Design(经典最近点对问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Oth ...

  4. hdu 1007 Quoit Design 分治求最近点对

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. HDU 1007 Quoit Design(二分+浮点数精度控制)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. HDU 1007 Quoit Design(计算几何の最近点对)

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...

  7. hdu 1007 Quoit Design (最近点对问题)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. HDU 1007 Quoit Design最近点对( 分治法)

    题意: 给出平面上的n个点,问任意点对之间的最短距离是多少? 思路: 先将所有点按照x坐标排序,用二分法将n个点一分为二个部分,递归下去直到剩下两或一个点.对于一个部分,左右部分的答案分别都知道,那么 ...

  9. HDU 1007:Quoit Design(分治求最近点对)

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:平面上有n个点,问最近的两个点之间的距离的一半是多少. 思路:用分治做.把整体分为左右两个部分,那么 ...

随机推荐

  1. git团队开发常用命令

    Git >>>>>>>>>>>> git clone <项目地址,http(s)> 把云端的项目克隆到本地 git ...

  2. HDU 6026 Deleting Edges

    最短路. 先建一个只包含最短路的有向无环图,每一个点选择任意一条入边即可生成一个树形图,那么树的种类就等于每个点的入度乘积. #include <bits/stdc++.h> using ...

  3. 洛谷P3066 [USACO12DEC] 逃跑的Barn [左偏树]

    题目传送门 逃跑的Barn 题目描述 It's milking time at Farmer John's farm, but the cows have all run away! Farmer J ...

  4. BZOJ3262陌上花开(三维偏序问题(CDQ分治+树状数组))+CDQ分治基本思想

    emmmm我能怎么说呢 CDQ分治显然我没法写一篇完整的优秀的博客,因为我自己还不是很明白... 因为这玩意的思想实在是太短了: fateice如是说道: 如果说对于一道题目的离线操作,假设有n个操作 ...

  5. asp.net core集成CAP(分布式事务总线)

    一.前言 感谢杨晓东大佬为社区贡献的CAP开源项目,传送门在此:.NET Core 事件总线,分布式事务解决方案:CAP 以及 如何在你的项目中集成 CAP[手把手视频教程],之前也在工作中遇到分布式 ...

  6. 深入理解javascript作用域系列第五篇

    前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已.但实际上,它们并不相同,却相 ...

  7. vim自动补全插件YouCompleteMe的安装及配置

    原文地址: http://blog.csdn.net/shixuehancheng/article/details/46289811

  8. ubuntu16.04安装python3

    今天用了下阿里云的云服务器,装个python3真是各种踩坑.记录下吧: ubuntu自带了2.7.想要装3.5并设置为默认python版本. 安装python3.5 sudo add-apt-repo ...

  9. Django错误大汇总

    1.安装django报错解决方案 找到第一条报错信息: File "c:\users\chenwei\envs\testvir2\lib\site-packages\pip\basecomm ...

  10. 我的sublime text3 配置文件设置

    { "ignored_packages": [ "Vintage" ], //vim模式 "line_padding_bottom": 2, ...