传送门

据说是一个叫做随机增量法的东西

枚举\(i\),如果不在圆中将它设为圆心

枚举\(j\),如果不在圆中将\((i,j)\)成为新的圆的直径

枚举\(k\),如果不在圆中让\(i,j,k\)组成的三角形的外接圆成为新的圆

据说在随机数据的情况下期望\(O(n)\),所以要在读进来的时候random_shuffle一下

主要是求三角形外接圆的圆心太恶心了……大概是这样的(图是偷来的)

//minamoto
#include<bits/stdc++.h>
#define rint register int
#define eps 1e-6
using namespace std;
const int N=5e5+5;
struct node{double x,y;}p[N],C;
int n;double R;
inline double dis(const node &a,const node &b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
inline bool in(const node &x){return dis(x,C)-R<eps;}
node get(node A,node B,node C){
node res;
double a1=B.x-A.x,a2=C.x-A.x;
double b1=B.y-A.y,b2=C.y-A.y;
double c1=(a1*a1+b1*b1)/2.0;
double c2=(a2*a2+b2*b2)/2.0;
double d=a1*b2-a2*b1;
res.x=A.x+(c1*b2-c2*b1)/d;
res.y=A.y+(c2*a1-c1*a2)/d;return res;
}
void solve(){
random_shuffle(p+1,p+1+n),C=p[1],R=0;
for(rint i=1;i<=n;++i)if(!in(p[i])){
C=p[i],R=0;for(rint j=1;j<i;++j)if(!in(p[j])){
C.x=(p[i].x+p[j].x)/2,C.y=(p[i].y+p[j].y)/2;
R=dis(p[i],p[j])/2;
for(rint k=1;k<j;++k)if(!in(p[k]))
C=get(p[i],p[j],p[k]),R=dis(C,p[i]);
}
}
}
int main(){
// freopen("testdata.in","r",stdin);
srand(20030719);
scanf("%d",&n);
for(rint i=1;i<=n;++i)scanf("%lf%lf",&p[i].x,&p[i].y);
solve();
printf("%.2lf %.2lf %.2lf\n",C.x,C.y,R);return 0;
}

最新文章

  1. jetbrain系列IDE设置
  2. java面向对象_抽象类和接口
  3. java JFileChooser选择文件和保存文件
  4. 敏捷个人-认识自我,管理自我 v0.8.pdf 下载
  5. html css js 一些记录.
  6. 移动前端头部标签(HTML5 head meta)
  7. Android JPush(极光推送)的使用教程
  8. BZOJ3547 : [ONTAK2010]Matchings
  9. 重写hashCode()的方法
  10. 如何参与一个GitHub开源项目
  11. K - Treasure Exploration - POJ 2594(最小路径覆盖+闭包传递)
  12. HUST 1372 marshmallow
  13. javascript中常用的
  14. PHP连接SQL Server数据库
  15. python __str__ 和__repr__方法
  16. 使用 vagrant新建Linux虚拟机
  17. Step by Step use OBD2 Scanner Guide
  18. Linux&#160;sudo&#160;命令使用简介
  19. 网工最实用最常用的网络命令之一——Ping 命令详解(一)
  20. “您查看的网页正在试图关闭窗口。是否关闭此窗口”的屏蔽方法(JavaScript)

热门文章

  1. 反片语(Ananagrams,Uva 156)
  2. 每日命令:(5)rm
  3. java导出word的6种方式(转发)
  4. python re模块与正则
  5. 重载与重写的区别----https://blog.csdn.net/zhu_apollo/article/details/1852542
  6. 九度oj 题目1089:数字反转
  7. hdu3303
  8. STL源码剖析 学习笔记 MiniSTL
  9. 四则运算结对编程(GUI)
  10. HDFS v1.0学习笔记