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 轴平行,再将所有点的 ...
随机推荐
- 洛谷 2048 BZOJ 2006 [NOI2010]超级钢琴
[题解] 贪心题.设五元组(mx,pos,l,r1,r2)表示最大值为mx,取得最大值的区间右端点为pos,区间左端点为l,区间右端点的可选区间为[r1,r2]. 每次从堆里拎出最大值,然后把这个区间 ...
- 自定义Realm
[单Realm] 1) jar包 2) 实现自定义Realm public class RealmOne implements Realm{ /** * 获取基本类名 */ @Override pub ...
- noip模拟赛 轰炸
题目描述 C国和W国爆发了战争!YJC决定对W国的n个城市进行轰炸.每个城市都有一个重要度ai.设xi=‘重要度大于ai的城市数+1’,那么编号为i城市就是第xi个被轰炸的城市.显然这样能保证重要度大 ...
- [K/3Cloud]K3Cloud的移动审批方面
基于最新的K3Cloud2的SP2,当前K3Cloud上所有的工作流都可以在移动手机上进行移动审批,具体如下: K/3 Cloud 支持移动审批,支持安卓和IOS. 关于申请试用: 1.打开浏览器,进 ...
- 超级钢琴(codevs 2934)
题目描述 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音 ...
- Spring的发展【一】
1.1. Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换. ...
- 模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)
Problem 3 经营与开发(exploit.cpp/c/pas) [题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXpl ...
- SQL Server 性能优化实战系列(文章索引) : 桦仔
http://www.cnblogs.com/gaizai/archive/2012/01/20/2327814.html
- spring项目启动需要的几个注解
1.@ComponentScan注解,spring context包下,可以理解嘛,扫描srping bean放在ioc容器中的. ApplicationContext是接口,就是IOC容器嘛,也在这 ...
- Node & Express: some tips
1. 设置Express端口号: 在app.js中添加 app.set('port', process.env.PORT || 3000); 之后命令行中打入 PORT=1234 node app.j ...