思路:

http://blog.csdn.net/commonc/article/details/52291822

(照着算法步骤写……)

已知三点共圆 求圆心的时候 就设一下圆心坐标(x,y) 解个方程就好了

//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int n;double R,tempx,tempy,tempz,tmpx,tmpy,tmpz;
struct Point{double x,y;}point[100050],Ans;
double Sqr(double x){return x*x;}
double dis(Point a,Point b){return sqrt(Sqr(a.x-b.x)+Sqr(a.y-b.y));}
bool in_circle(Point x){return dis(Ans,x)<=R;}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lf%lf",&point[i].x,&point[i].y);
random_shuffle(point+1,point+n);
for(int i=1;i<=n;i++)if(!in_circle(point[i])){
Ans.x=point[i].x,Ans.y=point[i].y,R=0;
for(int j=1;j<i;j++)if(!in_circle(point[j])){
Ans.x=(point[i].x+point[j].x)/2;
Ans.y=(point[i].y+point[j].y)/2;
R=dis(Ans,point[j]);
for(int k=1;k<j;k++)if(!in_circle(point[k])){
tempz=point[j].x-point[i].x;
tempx=2*(point[i].y-point[j].y)/tempz;
tempy=(Sqr(point[j].x)+Sqr(point[j].y)-Sqr(point[i].x)-Sqr(point[i].y))/tempz;
tmpz=point[k].x-point[j].x;
tmpx=2*(point[j].y-point[k].y)/tmpz;
tmpy=(Sqr(point[k].x)+Sqr(point[k].y)-Sqr(point[j].x)-Sqr(point[j].y))/tmpz;
Ans.y=(tmpy-tempy)/(tempx-tmpx);
Ans.x=(tempx*Ans.y+tempy)/2;
R=dis(Ans,point[j]);
}
}
}
printf("%f\n%f %f\n",R,Ans.x,Ans.y);
}

BZOJ 1336&1337最小圆覆盖的更多相关文章

  1. Bzoj 1336&1337 Alien最小圆覆盖

    1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 1473  ...

  2. bzoj 1337 最小圆覆盖

    /************************************************************** Problem: 1337 User: idy002 Language: ...

  3. bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖

    首先我写了个凸包就溜了 这是最小圆覆盖问题,今晚学了一下 先随机化点,一个个加入 假设当前圆心为o,半径为r,加入的点为i 若i不在圆里面,令圆心为i,半径为0 再重新从1~i-1不停找j不在圆里面, ...

  4. BZOJ 1337: 最小圆覆盖1336: [Balkan2002]Alien最小圆覆盖(随机增量法)

    今天才知道有一种东西叫随机增量法就来学了= = 挺神奇的= = A.令ci为包括前i个点的最小圆,若第i+1个点无法被ci覆盖,则第i+1个点一定在ci+1上 B.令ci为包括前i个点的最小圆且p在边 ...

  5. 【BZOJ-1336&1337】Alie最小圆覆盖 最小圆覆盖(随机增量法)

    1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1573   ...

  6. 2018.07.04 BZOJ1336&&1337: Balkan2002Alien最小圆覆盖

    1336: [Balkan2002]Alien最小圆覆盖 1337: 最小圆覆盖 Time Limit: 1 Sec Memory Limit: 162 MBSec Special Judge Des ...

  7. [BZOJ 1336] [Balkan2002] Alien最小圆覆盖 【随机增量法】

    题目链接:BZOJ - 1336 题目分析 最小圆覆盖有一个算法叫做随机增量法,看起来复杂度像是 O(n^3) ,但是可以证明其实平均是 O(n) 的,至于为什么我不知道= = 为什么是随机呢?因为算 ...

  8. bzoj 1336 最小圆覆盖

    最小圆覆盖 问题:给定平面上的一个点集,求半径最小的一个圆,使得点集中的点都在其内部或上面. 随机增量算法: 定义:点集A的最小圆覆盖是Circle(A) 定理:如果Circle(A)=C1,且a不被 ...

  9. 【BZOJ】1336: [Balkan2002]Alien最小圆覆盖

    题解 我们先把所有点random_shuffle一下 然后对前i - 1个点计算一个最小圆覆盖,然后第i个点如果不在这个圆里,那么我们把这个点当成一个新的点,作为圆心,半径为0 从头枚举1 - i - ...

随机推荐

  1. 根据数据库表结构生成java类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

  2. git使用(公钥私钥产生--远程库添加公钥--本地库关联远程库-使用)

    原文1:http://www.cnblogs.com/wangmingshun/p/5424767.html 原文2(指令):http://blog.csdn.net/xiaohanluo/artic ...

  3. C++之虚函数表

    本文引自:http://songlee24.github.io/blog/2014/09/02/c-plus-plus-jin-jie-zhi-xu-han-shu-biao/ C++通过继承(inh ...

  4. 利用IP安全策略关闭危险端口

    默认情况下,Windows服务器有很多端口是开放的,网络病毒和黑客可以通过这些端口连上你的服务器并进行攻击. 为了让你的系统变为铜墙铁壁,应该封闭这些端口,主要有:TCP 135.139.445.59 ...

  5. 《剑指offer》二叉搜索树与双向链表

    一.题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向 二.输入描述 输入一棵二叉搜索树 三.输出描述 将该二叉搜索树转换成一个 ...

  6. 前端学习之路——scss篇

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 Sass依赖于ruby环境,所以装sass之前先 ...

  7. layero和index

    zIndex:layer.zIndex, success:function(index,layero){ //layero 为当前层的DOM对象 var zIndex = layer.index; $ ...

  8. python3安装xadmin失败

    环境win7 旗舰版.python3 使用pip install xadmin命令的时候出现了错误>:\ (⊙o⊙) 解决方法如下: 使用pip download xadmin 现将xadmin ...

  9. [ZJOI2008]骑士(基环树,树形dp)

    [ZJOI2008]骑士 题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的 ...

  10. Fiddler 接口测试(Composer)的使用方法

    原文:Fiddler 接口测试(Composer)的使用方法 下载地址:https://www.telerik.com/download/fiddler 一.Composer简介 右侧Composer ...