传送门

期望\(O(n)\)的神奇算法
代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
void read(int &x){char ch; bool ok;for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1e5+1;
double eps=1e-6;
int n;
struct oo{double x,y;}a[maxn];
struct circle{double x,y,r;}c;
double dis(double x,double y,oo a){return sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));}
circle make_2(oo a,oo b){return (circle){(a.x+b.x)/2.0,(a.y+b.y)/2.0,dis((a.x+b.x)/2.0,(a.y+b.y)/2.0,b)};}
circle make_3(oo x1,oo x2,oo x3)
{double a=x1.x-x2.x,b=x1.y-x2.y,c=x1.x-x3.x,d=x1.y-x3.y,e=((x1.x*x1.x-x2.x*x2.x)-(x2.y*x2.y-x1.y*x1.y))/2.0,f=((x1.x*x1.x-x3.x*x3.x)-(x3.y*x3.y-x1.y*x1.y))/2.0,x0,y0;x0=(d*e-b*f)/(a*d-b*c),y0=(c*e-a*f)/(b*c-a*d);return (circle){x0,y0,dis(x0,y0,x1)};
}
int main()
{srand(1e9+7);read(n);for(rg int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y);random_shuffle(a+1,a+n+1);c=make_2(a[1],a[2]);for(rg int i=3;i<=n;i++)if(dis(c.x,c.y,a[i])-c.r>eps){c=make_2(a[1],a[i]);for(rg int j=1;j<i;j++)if(dis(c.x,c.y,a[j])-c.r>eps){c=make_2(a[i],a[j]);for(rg int k=1;k<j;k++)if(dis(c.x,c.y,a[k])-c.r>eps)c=make_3(a[i],a[j],a[k]);}}printf("%lf\n%lf %lf\n",c.r,c.x,c.y);
}

或者也可以选择put("nan");

转载于:https://www.cnblogs.com/lcxer/p/10329578.html

bzoj1336[Balkan2002]Alien最小圆覆盖相关推荐

  1. 最小球覆盖最小圆覆盖 题目总结

    最小圆覆盖: HYSBZ 1337 最小圆覆盖 给出平面上N个点,N<=10^5.请求出一个半径最小的圆覆盖住所有的点 Input 第一行给出数字N,现在N行,每行两个实数x,y表示其坐标. O ...

  2. HDU2215(最小圆覆盖问题)

    题意:就是求最小圆覆盖问题 方法一: #include<iostream> #include<algorithm> #include<cmath> #include ...

  3. 【hdoj】3007 Buried memory 【计算几何--最小圆覆盖】

    传送门:Buried memory 苍天饶过谁,第三次在hdoj上 交计算几何的题了,没一次是AC的. ┭┮﹏┭┮都是模板题啊,我都是抄板子的啊,为什么会这样,我怎么这么菜. 题意: 求最小圆覆盖 的 ...

  4. hdu 2215(最小圆覆盖)

    解题思路:最小圆覆盖,注意由于树也有半径,所以要加上树的半径0.5 #include<iostream> #include<cmath> #include<cstdio& ...

  5. POJ 2069最小球覆盖 HDU3007最小圆覆盖【模拟淬火算法】

    POJ 2069最小球覆盖 1.给定N个三维点,要求覆盖这些点的最小球半径: 2.采用模拟淬火算法,随机选取一个点作为初始解,然后不断向当前最远的点靠近: 3.这是一个不断调整的过程,对应模拟淬火算法 ...

  6. ZOJ - 1450 Minimal Circle HDU - 3007 Buried memory 最小圆覆盖模板 【随机函数】【增量法】

    题意 给N个点,求最小的圆将这N个点全部覆盖,输出圆心坐标和半径 分析 最小的圆肯定落在三个点上,因此暴力枚举圆上的三个点即可,点增量算法O(n ^ 3),加入随机化,平均复杂度可以降到O(n^2) ...

  7. P1742 最小圆覆盖

    P1742 最小圆覆盖 题意: 给出N个点,让你画一个最小的包含所有点的圆. 题解: 先说结论: 最优解的圆一定是在以某两个点连线为直径的圆 或者 某三个点组成的三角形的外接圆 初始化将某个圆心定为第 ...

  8. ZOJ 1450 Minimal Circle 点集的最小圆覆盖

    From: http://blog.csdn.net/zmx354/article/details/17076267 给定一个点集,求出能覆盖点集内所有点的半径最小的圆.包含点在圆上的情况.个人感觉算 ...

  9. luoguP1742 最小圆覆盖

    最小圆覆盖 首先 没错,我是个蒟蒻.luogu 流程 圆 C; for(i=1 to n) {if(P[i] 不在 C 内) {C = {P[i], 0};for(j=1 to i-1) {if(P[ ...

最新文章

  1. eclipse c语言_如果你的电脑是windows7/10的环境,用什么编译器学习C语言好?
  2. 常考数据结构与算法:找到字符串的最长无重复字符子串
  3. 第02课:简单好用的中文分词利器 jieba 和 HanLP
  4. 牛客题霸 [表达式求值] C++题解/答案
  5. python快速检测视频跳过帧_使用Python实现跳帧截取视频帧
  6. 拳王虚拟项目公社:2020主流的虚拟资源项目,最新最全自动化系统玩法
  7. 鸿蒙个人用户怎么申请,鸿蒙OS来了,这些机型的用户可以申请
  8. Android阅读手札:第一行代码(第一章)
  9. 下载carplay安卓版_apple carplay
  10. 反爬虫策略的应对方法汇总
  11. Linux下vi编辑器的使用方法
  12. 安装apk文件到linux,linux系统如何安装apk文件
  13. 十进制进制法_十进制转换成二进制及二进制转换成十进制是如何转换的?
  14. mysql long varchar2_long类型字段转换成varchar2类型
  15. windows文件名太长无法删除的解决办法
  16. 动态链接库(.dll) 动态导入库(.lib) 静态链接库(.lib)
  17. Kubeadm创建集群
  18. 北京中医药大学计算机应用基础作业,北京中医药大学计算机应用基础第五次.doc...
  19. “无法访问此网站”的一些原因
  20. Python之文件处理-JSON文件

热门文章

  1. 用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询
  2. Visual Studio 2019 16.1 正式发布,更快更高效
  3. 使用视图组件为ASP.NET Core创建侧面菜单
  4. Odoo10教程 -- 主题教程
  5. linux的帮助命令有,Linux帮助命令有哪些
  6. 前后端开发的心得体会_社招后端三面总结以及学习经验感言(操详细)
  7. python 百分比输出_获取Linux系统负荷百分比的python脚本
  8. js 将多个对象合并成一个对象 assign方法
  9. android banner动画框架,Android Studio Banner轮播图使用
  10. 计算机管理里面蓝牙音频有问题,win10更新到1903版,蓝牙音频存在问题,微软终于给出了解决方法-win10更新...