链接

详解http://blog.sina.com.cn/s/blog_6e7b12310100qnex.html

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. #include<vector>
  7. #include<cmath>
  8. #include<queue>
  9. #include<set>
  10. using namespace std;
  11. #define N 100000
  12. #define LL long long
  13. #define INF 0xfffffff
  14. const double eps = 1e-;
  15. const double pi = acos(-1.0);
  16. const double inf = ~0u>>;
  17. set<int>st;
  18. struct point
  19. {
  20. double x,y,r;
  21. point(double x = ,double y = ):x(x),y(y){}
  22. int id;
  23. }p[N],rank[N];
  24. struct line
  25. {
  26. double po;
  27. int id;
  28. }lef[N],rig[N];
  29. int rk[N],n,pp[N];
  30. double mid;
  31. typedef point pointt;
  32. point operator -(point a,point b)
  33. {
  34. return point(a.x-b.x,a.y-b.y);
  35. }
  36. int dcmp(double x)
  37. {
  38. if(fabs(x)<eps) return ;
  39. return x<?-:;
  40. }
  41. double dis(point a)
  42. {
  43. return sqrt(a.x*a.x+a.y*a.y*1.0);
  44. }
  45. int is_cross(int a,int b)
  46. {
  47. double dd = dis(rank[a]-rank[b]);
  48. if(dcmp(dd-rank[a].r-rank[b].r-mid-mid)>) return ;
  49. return ;
  50. }
  51. int judge(int a)
  52. {
  53. set<int>::iterator it=st.insert(a).first;//插入a后所在位置
  54. if(it!=st.begin())
  55. {
  56. if(is_cross(a,*--it))
  57. return ;
  58. it++;
  59. }
  60. if(++it!=st.end())
  61. {
  62. if(is_cross(a,*it)) return ;
  63. }
  64. return ;
  65. }
  66. int cal()
  67. {
  68. st.clear();
  69. int i = ,j = ;
  70. while(i<=n||j<=n)
  71. {
  72. if(j==n+||(i!=n+&&dcmp(lef[i].po-mid-(rig[j].po+mid))<=))//如果当且i圆的最左端小于j圆的最右端 将i插进来
  73. {
  74. int ip = rk[lef[i].id];
  75. if(judge(ip))
  76. return ;
  77. i++;
  78. }
  79. else
  80. {
  81. st.erase(rk[rig[j].id]);
  82. j++;
  83. }
  84. }
  85. return ;
  86. }
  87. double solve()
  88. {
  89. double low = 0.0,high = dis(p[]-p[])-p[].r-p[].r;
  90. while(low+eps<high)//二分距离
  91. {
  92. mid = (high+low)/;
  93. if(cal())
  94. high = mid;
  95. else low = mid;
  96. }
  97. return high+low;
  98. }
  99. bool cmp(line a,line b)
  100. {
  101. return a.po<b.po;
  102. }
  103. bool cmpp(point a,point b)
  104. {
  105. if(a.y==b.y) return a.x<b.x;
  106. return a.y<b.y;
  107. }
  108. int main()
  109. {
  110. int t,i;
  111. cin>>t;
  112. while(t--)
  113. {
  114. scanf("%d",&n);
  115. for(i = ; i <=n ;i++)
  116. {
  117. scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].r);
  118. lef[i].po = p[i].x-p[i].r;//每个圆的最左端
  119. lef[i].id = i;
  120. rig[i].po = p[i].x+p[i].r;//每个圆的最右端
  121. rig[i].id = i;
  122. rank[i] = p[i];//按y坐标排序
  123. rank[i].id = i;
  124. }
  125. sort(lef+,lef+n+,cmp);
  126. sort(rig+,rig+n+,cmp);
  127. sort(rank+,rank+n+,cmpp);
  128. for(i = ; i <= n; i++)
  129. {
  130. rk[rank[i].id] = i;//每个圆按y坐标排序后位于第几
  131. }
  132. double ans = solve();
  133. printf("%.6f\n",ans);
  134. }
  135. return ;
  136. }

hdu3124Arbiter(最小圆距离-扫描线)的更多相关文章

  1. @codeforces - 793G@ Oleg and chess

    目录 @description - translation@ @solution@ @part - 1@ @part - 2@ @part - 3@ @part - 4@ @accepted code ...

  2. CSS动效集锦,视觉魔法的碰撞与融合(三)

    本文讲述的原理和相关demo 扇形DIV的使用——实现雷达扫描图 DIV环形布局—实现loading圈 动画的向量合成—实现抛物线动画 无限滚动动画—实现跑马灯效果 perspective和trans ...

  3. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  4. BZOJ_3476_[Usaco2014 Mar]The Lazy Cow_扫描线+切比雪夫距离

    BZOJ_3476_[Usaco2014 Mar]The Lazy Cow_扫描线+切比雪夫距离 Description It's a hot summer day, and Bessie the c ...

  5. BZOJ-3228 棋盘控制 线段树+扫描线+鬼畜毒瘤

    3228: [Sdoi2008]棋盘控制 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 23 Solved: 9 [Submit][Status][D ...

  6. BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞

    看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...

  7. 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)

    转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...

  8. 最小圆覆盖 hdu 3007

    今天学习了一下最小圆覆盖, 看了一下午都没看懂, 晚上慢慢的摸索这代码,接合着别人的讲解, 画着图跟着代码一步一步的走着,竟然有些理解了. 最小圆覆盖: 给定n个点, 求出半径最小的圆可以把这些点全部 ...

  9. 【转换模型+扫描线】【UVA1398】Meteor

    The famous Korean internet company nhn has provided an internet-based photo service which allows The ...

随机推荐

  1. shell基础二十篇 一些笔记

    shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...

  2. java 面试每日一题4

    题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?  1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. publ ...

  3. 进程外session

    进程外session A  SqlServer 1.管理员身份运行cmd 2.更换目录  cd c:\Windows\Microsoft.NET\Framework\v4.0.30319> 3. ...

  4. weblogic远程调试

    修改 bin/startWebLogic.cmd 增加红字部分,其中9999是调试监听端口,然后可以连接这个端口进行远程调试 set JAVA_DEBUG=-Xdebug -Xnoagent -Xru ...

  5. js笔记---封装一般运动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Visual Studio + SqlServer

    vs2010: http://pan.baidu.com/s/1eQrlUwU sqlServer2008: http://pan.baidu.com/s/1sjQbyk1

  7. c#中委托和事件(续)(转)

    本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为 ...

  8. Javascript中setTimeout()的用法详解

    1.SetTimeOut()       1.1 SetTimeOut()语法例子       1.2 用SetTimeOut()执行Function       1.3 SetTimeout()语法 ...

  9. acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy

    GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...

  10. jquery uploadify上传插件兼容火狐问题

    jquery uploadify长传插件兼容火狐问题.因为现在火狐以不在默认安装flash插件.所以uploadify的flash版就需要安装flash插件.还可以成功. 可以到哪里下载安装:http ...