HDU 3007 最小圆覆盖 计算几何
思路:
随机增量法
(好吧这数据范围并不用)
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef double db;
int n;
struct P{db x,y,r;P(){}P(db X,db Y){x=X,y=Y;}}p[],ans;
P operator-(P a,P b){return P(a.x-b.x,a.y-b.y);}
db dis(P a){return sqrt(a.x*a.x+a.y*a.y);}
bool ck(P a){return dis(a-ans)<=ans.r;}
P get(db x1,db y1,db x2,db y2,db x3,db y3){
db a1=*(x2-x1),b1=*(y2-y1),c1=x2*x2+y2*y2-x1*x1-y1*y1;
db a2=*(x3-x2),b2=*(y3-y2),c2=x3*x3+y3*y3-x2*x2-y2*y2;
return P((c1*b2-c2*b1)/(a1*b2-a2*b1),(a1*c2-a2*c1)/(a1*b2-a2*b1));
}
int main(){
while(scanf("%d",&n)&&n){
for(int i=;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
random_shuffle(p+,p++n),ans.x=ans.y=ans.r=;
for(int i=;i<=n;i++)if(!ck(p[i])){
ans.x=ans.y=ans.r=;
for(int j=;j<i;j++)if(!ck(p[j])){
ans=P((p[i].x+p[j].x)/,(p[i].y+p[j].y)/);
ans.r=dis(ans-p[j]);
for(int k=;k<j;k++)if(!ck(p[k])){
ans=get(p[i].x,p[i].y,p[j].x,p[j].y,p[k].x,p[k].y);
ans.r=dis(ans-p[j]);
}
}
}
printf("%.2lf %.2lf %.2lf\n",ans.x,ans.y,ans.r);
}
}
HDU 3007 最小圆覆盖 计算几何的更多相关文章
- HDU 3007 Buried memory(计算几何の最小圆覆盖,模版题)
Problem Description Each person had do something foolish along with his or her growth.But,when he or ...
- 洛谷P1742 最小圆覆盖(计算几何)
题意 题目链接 Sol 暴力做法是\(O(n^3)\)枚举三个点然后check一下是否能包含所有点 考虑一种随机算法,首先把序列random_shuffle一下. 然后我们枚举一个点\(i\),并维护 ...
- 最小圆覆盖 hdu 3007
今天学习了一下最小圆覆盖, 看了一下午都没看懂, 晚上慢慢的摸索这代码,接合着别人的讲解, 画着图跟着代码一步一步的走着,竟然有些理解了. 最小圆覆盖: 给定n个点, 求出半径最小的圆可以把这些点全部 ...
- 洛谷P1742 最小圆覆盖(计算几何)
题面 传送门 题解 之前只是在抄题解--这篇才算是真正自己想的吧-- 首先我们把输入序列给\(random\)一下防止出题人好心送你一个毒瘤序列 我们设\(r\)为当前最大半径,\(o\)为此时对应圆 ...
- 2018.10.15 bzoj3564: [SHOI2014]信号增幅仪(坐标处理+最小圆覆盖)
传送门 省选考最小圆覆盖? 亦可赛艇(你们什么都没看见) 在大佬的引领下成功做了出来. 就是旋转坐标使椭圆的横轴跟xxx轴平行. 然后压缩横坐标使得其变成一个圆. 然后跑最小覆盖圆就可以了. 注意题目 ...
- 【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 轴平行,再将所有点的 ...
随机推荐
- ubuntu下手动配置apache2.4.12
(apache2也可以使用 sudo apt-get install apache2来安装,下面来讲解下如何手动安装配置apache2) 在安装apache2之前,先要安装apache2的依赖项,ap ...
- idea 获取当前git最新分支
菜单栏VCS->选中Git 选择Fetch 获取最新分支
- nyoj 4 ASCII码排序(set,multiset)
ASCII码排序 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输 ...
- Linux & Filesystem Hierarchy Standard
Linux & Filesystem Hierarchy Standard The Filesystem Hierarchy Standard of Linux https://zhuanla ...
- 如何高效读写百万级的Excel?
高效读取百万级数据 接上一篇介绍的高效写文件之后,最近抽时间研究了下Excel文件的读取.概括来讲,poi读取excel有两种方式:用户模式和事件模式. 然而很多业务场景中的读取Excel仍然采用用户 ...
- 定义Portal显示规则
Defining Portal Display Rules Use You use the Portal Display Rules editor to create and edit rule co ...
- xtrabackup 恢复单表步骤
1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export 备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...
- 在docker上安装运行mysql实例
ps:实验环境是:CentOS Linux release 7.3 64位1.获取mysql镜像从docker hub的仓库中拉取mysql镜像docker pull mysql查看镜像docker ...
- - > 并查集详解(第二节)
以下是并查集思路详解: 一:概念 并查集处理的是“集合"之间的关系.当给出两个元素的一个无序数对(a,b)时,需要快速“合并”a和b分别所在的集合,这期间需要反复“查找”某元素所在的集合.“ ...
- 《Linux内核分析》MOOC课程
http://www.cnblogs.com/wickedpriest/p/4315189.html