最小圆覆盖

首先

没错,我是个蒟蒻。luogu

流程

圆 C;
for(i=1 to n) {
if(P[i] 不在 C 内) {
C = {P[i], 0};
for(j=1 to i-1) {
if(P[j] 不在 C 内) {
C = {0.5*(P[i]+P[j]), 0.5*dist(P[i], P[j])};
for(k=1 to j-1) {
if(P[k] 不在 C 内)
C = 外接圆(P[i], P[j], P[k]);
}
}
}
}
}

随机增量

random_shuffle.

打乱顺序,防止毒瘤。

三点共圆

好像这是解析几何的方法。

就是列出方程。

\[(x1-x)^{2}+(y1-y)^{2}=r^{2}
\]

\[(x2-x)^{2}+(y2-y)^{2}=r^{2}
\]

\[(x3-x)^{2}+(y3-y)^{2}=r^{2}
\]

看到这里其实泥们就不用再看可以自己解出来了。

然后等式1-等式2,等式1-等式3列出两个二元一次方程,整理一下是这样的。

\[(x1-x2)*x+(y1-y2)*y=\frac{x1^2+y1^2-(x2^2+y2^2)}{2}
\]

\[(x1-x3)*x+(y1-y3)*y=\frac{x1^2+y1^2-(x3^2+y3^2)}{2}
\]

可以看做

\[ax+by=c
\]

\[dx+ey=f
\]

那么\(x=\frac{b*f-c*e}{b*d-a*e}, y=\frac{d*c-a*f}{b*d-a*e}\)

模板链接

zoj1450

bzoj1226或者bzoj1337

数据比bzoj强的luogu

各个地方不同,不要VC了

模板

#include <bits/stdc++.h>
using namespace std;
const double eps=1e-10;
struct Point {double x,y;};
double dis(Point a,Point b) {
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int n;
Point a[100005],o;
double r;
void circum(Point p1,Point p2,Point p3) {
double a=2*(p2.x-p1.x),b=2*(p2.y-p1.y),
c=p2.x*p2.x+p2.y*p2.y-p1.x*p1.x-p1.y*p1.y,
d=2*(p3.x-p1.x),e=2*(p3.y-p1.y),
f=p3.x*p3.x+p3.y*p3.y-p1.x*p1.x-p1.y*p1.y;
o.x=(b*f-e*c)/(b*d-e*a);
o.y=(d*c-a*f)/(b*d-e*a);
r=dis(p1,o);
}
int main() {
while(scanf("%d",&n)!=EOF&&n) {
for(int i=1;i<=n;++i) scanf("%lf%lf",&a[i].x,&a[i].y);
random_shuffle(a+1,a+1+n);
o=a[1],r=0;
for(int i=2;i<=n;++i) {
if(dis(o,a[i])>r+eps) {
o=a[i],r=0;
for(int j=1;j<=i-1;++j) {
if(dis(o,a[j])>r+eps) {
o.x=(a[i].x+a[j].x)/2;
o.y=(a[i].y+a[j].y)/2;
r=dis(o,a[j]);
for(int k=1;k<=j-1;++k)
if(dis(o,a[k])>r+eps)
circum(a[i],a[j],a[k]);
}
}
}
}
printf("%.10lf\n%.10lf %.10lf\n",r,o.x,o.y);
}
return 0;
}

luoguP1742 最小圆覆盖的更多相关文章

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

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

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

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

  3. hdu3007Buried memory(最小圆覆盖)

    链接 普通的暴力复杂度达到O(n^4),对于这题肯定是不行的. 解法:随机增量算法 参考http://www.2cto.com/kf/201208/149602.html algorithm:A.令C ...

  4. [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】

    题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...

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

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

  6. 最小圆覆盖 hdu 3007

    今天学习了一下最小圆覆盖, 看了一下午都没看懂, 晚上慢慢的摸索这代码,接合着别人的讲解, 画着图跟着代码一步一步的走着,竟然有些理解了. 最小圆覆盖: 给定n个点, 求出半径最小的圆可以把这些点全部 ...

  7. bzoj1336: [Balkan2002]Alien最小圆覆盖

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1336 1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 ...

  8. 【做题】POI2011R1 - Plot——最小圆覆盖&倍增

    原文链接 https://www.cnblogs.com/cly-none/p/loj2159.html 题意:给出\(n\)个点,你需要按编号将其划分成不超过\(m\)段连续的区间,使得所有每个区间 ...

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

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

随机推荐

  1. c# DataRow[]转Datatable

    方法一: Datatable dt=new Datatable(); //添加列和数据(代码省略) DataRow[] drs = dt.Select("DeviceID='123'&quo ...

  2. 根据语义来选择:value-like传副本, pointer-like传引用

    ★ (一个成员)变量的 创建.初始化.赋值 “默认值”:内置类型的局部变量.内置类型的成员变量(未设置=initval;) 没有默认值!  若创建时不指定值,则不进行初始化.则其值未定义!!! “指定 ...

  3. Django--母版

    目录 母版 语法 案例 在之前的两个小程序中,可以发现在写html页面的时候有很多重复的代码 而在python中,为了避免写重复代码,我们通过函数.模块或者类来进行实现,所以在Django里面也有这样 ...

  4. python 日期、时间、字符串相互转换

    python 日期.时间.字符串相互转换 在python中,日期类型date和日期时间类型dateTime是不能比较的. (1)如果要比较,可以将dateTime转换为date,date不能直接转换为 ...

  5. JavaScript 之 取消 a 标签的默认行为

    方式一 语法格式: <a href="javascript:;">百度</a> javascript: 是一个伪协议,其他的伪协议还有 mail:  tel ...

  6. Sublime Text3 安装 CTags 插件出现乱码

    1.下载ctags.exe 可以直接下载我上传好的资源:http://download.csdn.net/download/zhaoxd200808501/9971251.或者网络上其他地方也可以下载 ...

  7. Linux下 svn相关操作

    Linux下 svn相关操作 一.首先看看svn安装的位置: 命令: find / -name svn /var/svn :表示安装目录 /user/bin/svn :表示命令目录 可以看到的是svn ...

  8. 【转】UCOSIII基础知识点

    1.其中最有用的功能应该是时间片轮转法( roundrobin), 这个是 uC/OS-II 中不支持的,但是现在已经是 uC/OS-III 的一个功能了 2.uC/OS-III 被设计用于 32 位 ...

  9. Django之DRF源码分析(二)---数据校验部分

    Django之DRF源码分析(二)---数据校验部分 is_valid() 源码 def is_valid(self, raise_exception=False): assert not hasat ...

  10. Kali下安装Java环境

    <-----教你在Kali下安装Java环境-----> 1. 下载1.8u121的JAVA JDK 下载地址:http://java.sun.com/javase/downloads/i ...