题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2823

随机增量法。不断加点维护圆,主要是三点共圆那里打得烦(其实也就是个两中垂线求交点+联立方程求交点而已TAT。。

  1. #include<cstring>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<cmath>
  6. #define rep(i,l,r) for (int i=l;i<=r;i++)
  7. #define down(i,l,r) for (int i=l;i>=r;i--)
  8. #define clr(x,y) memset(x,y,sizeof(x))
  9. #define maxn 1000009
  10. #define eps 1e-6
  11. using namespace std;
  12. typedef unsigned long long ll;
  13. struct P{double x,y;
  14. }a[maxn],o;
  15. double r;
  16. int n;
  17. int read(){
  18. int x=,f=; char ch=getchar();
  19. while (!isdigit(ch)){
  20. if (ch=='-') f=-; ch=getchar();
  21. }
  22. while (isdigit(ch)){
  23. x=x*+ch-''; ch=getchar();
  24. }
  25. return x*f;
  26. }
  27. P get2(P a,P b){
  28. P tmp;
  29. tmp.x=(a.x+b.x)/; tmp.y=(a.y+b.y)/;
  30. return tmp;
  31. }
  32. double sqr(double x){
  33. return x*x;
  34. }
  35. double dis(P a,P b){
  36. return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
  37. }
  38. P cross(double a1,double a2,double b1,double b2,double c1,double c2){
  39. P tmp;
  40. tmp.x=(c2*b1-c1*b2)/(a1*b2-a2*b1); tmp.y=(c2*a1-c1*a2)/(b1*a2-b2*a1);
  41. return tmp;
  42. }
  43. P get3(P a,P b,P c){
  44. P tmp;
  45. double a1=b.x-a.x,b1=b.y-a.y,c1=(sqr(a.y)-sqr(b.y)+sqr(a.x)-sqr(b.x))/;
  46. double a2=c.x-a.x,b2=c.y-a.y,c2=(sqr(a.x)+sqr(a.y)-sqr(c.x)-sqr(c.y))/;
  47. return tmp=cross(a1,a2,b1,b2,c1,c2);
  48. }
  49. int cmp(double x){
  50. if (fabs(x)<eps) return ;
  51. if (x>) return ;
  52. return -;
  53. }
  54. int main(){
  55. n=read();
  56. rep(i,,n){
  57. scanf("%lf%lf",&a[i].x,&a[i].y);
  58. }
  59. int x,y;
  60. rep(i,,n) {
  61. x=rand()%n+; y=rand()%n+;
  62. swap(a[x],a[y]);
  63. }
  64. o=a[]; r=;
  65. rep(i,,n){
  66. if (cmp(dis(a[i],o)-r)<) continue;
  67. o=a[i]; r=;
  68. rep(j,,i-){
  69. if (cmp(dis(a[j],o)-r)<) continue;
  70. o=get2(a[i],a[j]); r=dis(a[j],o);
  71. rep(k,,j-) {
  72. if (cmp(dis(a[k],o)-r)<) continue;
  73. o=get3(a[i],a[j],a[k]); r=dis(a[k],o);
  74. }
  75. }
  76. }
  77. printf("%.2lf %.2lf ",o.x,o.y);
  78. printf("%.2lf\n",r);
  79. return ;
  80. }

BZOJ 2823: [AHOI2012]信号塔的更多相关文章

  1. 2018.07.04 BZOJ 2823: AHOI2012信号塔(最小圆覆盖)

    2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MB Description 在野外训练中,为了确保每位参加集训的成员安全,实时的掌握 ...

  2. BZOJ.2823.[AHOI2012]信号塔(最小圆覆盖 随机增量法)

    BZOJ 洛谷 一个经典的随机增量法,具体可以看这里,只记一下大体流程. 一个定理:如果一个点\(p\)不在点集\(S\)的最小覆盖圆内,那么它一定在\(S\bigcup p\)的最小覆盖圆上. 所以 ...

  3. bzoj 2823: [AHOI2012]信号塔 最小圆覆盖

    题目大意: 给定n个点,求面积最小的园覆盖所有点.其中\(n \leq 10^6\) 题解: 恩... 刚拿到这道题的时候... 什么???最小圆覆盖不是\(O(n^3)\)的随机增量算法吗????? ...

  4. 【BZOJ】2823: [AHOI2012]信号塔

    题意 给\(n\)个点,求一个能覆盖所有点的面积最小的圆.(\(n \le 50000\)) 分析 随机增量法 题解 理论上\(O(n^3)\)暴力,实际上加上随机化后期望是\(O(n)\)的. 算法 ...

  5. bzoj2823[AHOI2012]信号塔

    2823: [AHOI2012]信号塔 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1190  Solved: 545[Submit][Status ...

  6. 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)

    [BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...

  7. 【bzoj2823】 AHOI2012—信号塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=2823 (题目链接) 题意 求最小圆覆盖 Solution 关于最小圆覆盖的做法,论文里面都有.其实真 ...

  8. (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)

    bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...

  9. AHOI2012 信号塔 | 最小圆覆盖模板

    题目链接:戳我 最小圆覆盖. 1.枚举第一个点,考虑当前圆是否包含了这个点,如果没有,则把圆变成以这个点为圆心,半径为0的圆. 2.枚举第二个点,考虑圆是否包含了这个点,如果没有,则把圆变成以这两个点 ...

随机推荐

  1. ios 中的循环引用问题及解决

    循环引用,指的是多个对象相互引用时,使得引用形成一个环形,导致外部无法真正是否掉这块环形内存.其实有点类似死锁. 举个例子:A->B->C->....->X->B   - ...

  2. dispatch_sync和dispatch_async的区别

    dispatch_sync 线程同步.dispatch_async线程异步 比如 //同步 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE ...

  3. Android Activity生命周期详细解析

    概况 讲Android Activity那怎么都绕不过这张图,这篇文章也是围绕这幅图详细分析. 背景 假设这是你的APP,以此为背景,下面的每个part请结合上图理解. #Case 1 当按下app启 ...

  4. CJOJ 血帆海盗

    Description 随着资本的扩大,藏宝海湾贸易亲王在卡利姆多和东部王 国大陆各建立了N/2 个港口.大灾变发生以后,这些港口之间失去了联系,相继脱离了藏宝海湾贸易亲王的管辖,各自为政.利益的驱动 ...

  5. weex Mac开发环境

    安装: 1.java的jdk下载和安装 1-1.下载.安装:省略 1-2.配置 第一步:命令行内输入touch .bash_profile命令,生成.bash_profile的隐藏配置文件,用于配置j ...

  6. 房上的猫:for循环,跳转语句与循环结构,跳转语句进阶

    一.for循环 1.定义:  for循环语句的主要作用是反复执行一段代码,直到满足一定条件为止 2.组成部分:  (1)初始部分:设置循环的初始状态  (2)循环体:重复执行的代码  (3)迭代部分: ...

  7. Jupyter Notebook使用小技巧

    在 C:\Windows\Fonts目录下找到Mircosoft YaHei UI字体,然后复制到[你的Python安装路径]/Lib/site-packages/matplotlib/mpl-dat ...

  8. 微信小程序开发教程目录

    本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...

  9. jQuery 选择器 (一)

    选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $( ...

  10. javascript函数与表达式

    函数的定义 函数声明 由三部分组成:函数名,函数参数,函数体 函数体没有使用return关键字返回函数时,函数调用时返回默认的undefined:如果有使用return语句,则返回指定内容 funct ...