题目:求n个点的最小圆覆盖。

题解:最小圆覆盖,上模板。复杂度证明可以戳:这里

代码:

 #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 1000000+5
#define maxm 200000+5
#define eps 1e-6
#define ll long long
#define ull unsigned long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
#define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
#define mod 1000000007
#define lch k<<1,l,mid
#define rch k<<1|1,mid+1,r
#define sqr(x) (x)*(x)
#define db double
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
struct point
{
db x,y;
point operator +(point b){return (point){x+b.x,y+b.y};}
point operator /(db b){return (point){x/b,y/b};}
}a[maxn];
int n;
db ans;
inline db dist(point a,point b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));}
inline point calc(db a,db b,db c,db d,db e,db f)
{
return (point){(c*e-f*b)/(a*e-d*b),(a*f-c*d)/(a*e-d*b)};
}
inline point get(point a,point b,point c)
{
return calc(b.x-a.x,b.y-a.y,(sqr(b.x)+sqr(b.y)-sqr(a.x)-sqr(a.y))/2.0,
c.x-b.x,c.y-b.y,(sqr(c.x)+sqr(c.y)-sqr(b.x)-sqr(b.y))/2.0);
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();
for1(i,n)scanf("%lf%lf",&a[i].x,&a[i].y);
for1(i,n)swap(a[rand()%n+],a[rand()%n+]);
ans=;
for1(i,n)if(dist(a[i],a[])>ans+eps)
{
a[]=a[i];ans=;
for1(j,i-)if(dist(a[j],a[])>ans+eps)
{
a[]=(a[i]+a[j])/;ans=dist(a[],a[i]);
for1(k,j-)if(dist(a[k],a[])>ans+eps)
{
a[]=get(a[i],a[j],a[k]);ans=dist(a[],a[i]);
}
}
}
printf("%.2f %.2f %.2f\n",a[].x,a[].y,ans);
return ;
}

我不会说告诉你这题是三倍经验的

最新文章

  1. bootstrapValidator.js 做表单验证
  2. Ztree使用笔记
  3. &lt;转&gt;Linux环境进程间通信(二): 信号(上)
  4. 团体程序设计天梯赛-练习集L1-014. 简单题
  5. [HDU 4549] M斐波那契数列
  6. Android4.0窗口机制和创建过程分析
  7. Swift - 使用UIView给页面添加4&#215;4方格
  8. Servlet路径映射
  9. forfiles命令批处理删除过期文件
  10. web自动化1-selenium简介及环境搭建
  11. DWM1000 测距原理简单分析 之 SS-TWR代码分析1 -- [蓝点无限]
  12. python中的文件处理
  13. whil
  14. maven项目打包成war包发布到tomcat下...
  15. memcached 源码阅览 一
  16. 1018. Binary Prefix Divisible By 5可被 5 整除的二进制前缀
  17. IntelliJ IDEA——SVN的配置及使用
  18. MAC系统上不能调试华为手机
  19. 【BZOJ2563】阿狸和桃子的游戏(贪心)
  20. JSON XSS

热门文章

  1. CSS transform中的rotate的旋转中心怎么设置
  2. CPU的主频
  3. 数据包注入重放工具aireplay-ng
  4. [ 转载 ] Http详解2
  5. [CF580E]Kefa and Watch
  6. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) C. Table Tennis Game 2 水题
  7. windows下用nginx配置https服务器
  8. 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接(转)
  9. Oracle初始化参数之memory_target
  10. CentOS 6.8 安装最新版 Git