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 轴平行,再将所有点的 ...
随机推荐
- 自己动手编写vue插件
一.为什么要自己动手写插件呢,原因有二: 其一:是因为最近产品了提了一个在web端接收,消息通知的需求,产品要求在若干个页面内如果有消息,就要弹出消息弹窗展示给用户,略加思索之后,第一反应就是写个消息 ...
- lua排序算法
SEED = ; --随机序列 可任取 NUM = ; --排序规模 --随机序列 初始数据 function GenRnd( seed, n ) --生成随机数 data = {}; local r ...
- 51nod1485 字母排序
[题解] 开26棵线段数,记录区间内每种字母的出现次数,修改的时候就用区间设置为一个数操作即可.同时也有平衡树做 #include<cstdio> #include<algorith ...
- The Falling Leaves(建树方法)
uva 699 紫书P159 Each year, fall in the North Central region is accompanied by the brilliant colors of ...
- idea 类图显示
不得不说idea java开发的神器啊,免去了自己画图的很多工作量. 打开类图快捷键:Ctrl+Alt+Shift+U
- Java基础学习总结(78)——Java main方法深入研究学习
1.不用main方法如何定义一个类? 不行,没有main方法我们不能运行Java类. 在Java 7之前,你可以通过使用静态初始化运行Java类.但是,从Java 7开始就行不通了. 2.main() ...
- https://blog.csdn.net/zhi_sheng/article/details/78910082----mybatis写当天 当月的数据 时间段数据
https://blog.csdn.net/zhi_sheng/article/details/78910082---- mybatis写当天 当月的数据 时间段数据
- 互斥的数(codevs 1553)
题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...
- [codeVS3943] 数学奇才琪露诺
题目描述 Description 作为上白泽慧音老师的出色弟子,数学奇才琪露诺在算术方面有很深的造诣.今天,codevs有幸请到了这位数学界的奇葩作为本场考试的第一题主考官. 琪露诺喜欢0-9之间的数 ...
- com.101tec.ZKClient实现中的subscribeDataChanges设置的监听器事件不回调的问题研究
1.如果在Web项目,本身在后台运行,所以注册的事件应该是正常回调的. 2.如果是Application项目,如果是简单的测试,那么运行完之后,整个程序就结束了,程序很快,所以没等到事件回调就关了,解 ...