luoguP1742 最小圆覆盖
最小圆覆盖
首先
没错,我是个蒟蒻。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.
打乱顺序,防止毒瘤。
三点共圆
好像这是解析几何的方法。
就是列出方程。
\]
\]
\]
看到这里其实泥们就不用再看可以自己解出来了。
然后等式1-等式2,等式1-等式3列出两个二元一次方程,整理一下是这样的。
\]
\]
可以看做
\]
\]
那么\(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 最小圆覆盖的更多相关文章
- 【BZOJ-1336&1337】Alie最小圆覆盖 最小圆覆盖(随机增量法)
1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 1573 ...
- Bzoj 1336&1337 Alien最小圆覆盖
1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 Sec Memory Limit: 162 MBSec Special Judge Submit: 1473 ...
- hdu3007Buried memory(最小圆覆盖)
链接 普通的暴力复杂度达到O(n^4),对于这题肯定是不行的. 解法:随机增量算法 参考http://www.2cto.com/kf/201208/149602.html algorithm:A.令C ...
- [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】
题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...
- [BZOJ 1336] [Balkan2002] Alien最小圆覆盖 【随机增量法】
题目链接:BZOJ - 1336 题目分析 最小圆覆盖有一个算法叫做随机增量法,看起来复杂度像是 O(n^3) ,但是可以证明其实平均是 O(n) 的,至于为什么我不知道= = 为什么是随机呢?因为算 ...
- 最小圆覆盖 hdu 3007
今天学习了一下最小圆覆盖, 看了一下午都没看懂, 晚上慢慢的摸索这代码,接合着别人的讲解, 画着图跟着代码一步一步的走着,竟然有些理解了. 最小圆覆盖: 给定n个点, 求出半径最小的圆可以把这些点全部 ...
- bzoj1336: [Balkan2002]Alien最小圆覆盖
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1336 1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 ...
- 【做题】POI2011R1 - Plot——最小圆覆盖&倍增
原文链接 https://www.cnblogs.com/cly-none/p/loj2159.html 题意:给出\(n\)个点,你需要按编号将其划分成不超过\(m\)段连续的区间,使得所有每个区间 ...
- 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)
[BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...
随机推荐
- 分享大麦UWP版本开发历程-01.响应式轮播顶部焦点图
话说有一天,临近下班无心工作,在网上看各种文章,阅读到了一篇名为<聊聊大麦网UWP版的首页顶部图片联动效果的实现方法>(传递:http://www.cnblogs.com/hippieZh ...
- 我的第一个netcore2.2 api项目搭建(三)
上一章快速添加了swagger文档管理功能,我的第一个netcore2.2 api项目搭建(二) 这一章实现目标三:api添加身份验证功能 在实现该目标之前,先得理解netcore运行机制. 这是微软 ...
- 两数相加(C#数据结构和算法练习)
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 服务发现对比:Zookeeper vs etcd vs Consul
我们拥有的服务越多,如果我们使用预定义的端口,就会发生冲突的可能性越大.毕竟,在同一端口上不能监听两个服务.管理一百个服务所使用的所有端口的紧密列表本身就是一项挑战.将那些服务所需的数据库添加到该列表 ...
- webpack等bundler是如何工作的-简化版本
webpack- why and how 首先不要被webpack做的复杂花哨的工作所迷惑,到底webpack是个啥?一句话,webpack是一个module bundler(模块打包器).多一句话, ...
- docker-compose进阶
笔者在前文<Docker Compose 简介>和<Dcoker Compose 原理>两篇文章中分别介绍了 docker compose 的基本概念以及实现原理.本文我们将继 ...
- cmd脚本
管道命令 | |命令的作用,就是让前一命令的输出当做后一命令的输入. > >会清除掉原有文件中的内容后把新的内容写入原文件: echo @echo off > a.bat. > ...
- Vue学习之基础及部分指令小结(一)
一.理解MVC和MVVM的关系: MVC:Model View Controller (模型 视图 控制器) 分别为:业务逻辑.界面.用来调度View和Model层 MVVM:Model View V ...
- code_demo 用随机森林做缺失值预测
直接上代码 在做特征工程的时候, 其实可以用算法来处理特征工程的, 比如缺失值填充之类的. 这里一段code_demo是搬运来的, 不过是真滴好用呢. # RandomForest - 强化, 对 n ...
- 【漏洞复现】Apache Solr via Velocity template远程代码执行
0x01 概述 Solr简介 Apache Solr 是一个开源的企业级搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache Solr ...