最小圆覆盖(Smallest Enclosing Discs)
随机增量算法(a randomized incremental algorithm)
#define sqr(x) ((x)*(x))
#define EPS 1e-4 struct P{
double x, y;
P(double x, double y):x(x),y(y){}
P(P &a, P &b):x(b.x-a.x),y(b.y-a.y){}
P(){}
P mid(P &a){
return P((a.x+x)/, (a.y+y)/);
}
double cross(P &a){
return x*a.y-y*a.x;
}
double len2(){
return sqr(x)+sqr(y);
}
double dis(P &a){
return sqrt(sqr(x-a.x)+sqr(y-a.y));
}
void print(){
printf("%f %f\n", x, y);
}
}; struct Disc{
P o;
double r;
bool cover(P &a){
return r-o.dis(a) >= -EPS;
}
Disc(){}
Disc(P &o, double r):o(o),r(r){}
Disc(P &a, P &b):o(a.mid(b)), r(a.dis(b)/){}
Disc(P &a, P &b, P &c){
double t1=b.len2()-a.len2();
double t2=c.len2()-a.len2();
P p1(a, b), p2(a, c);
double t3=p1.cross(p2)*;
P p3(t1, p1.y), p4(t2, p2.y);
P p5(p1.x, t1), p6(p2.x, t2);
o=P(p3.cross(p4)/t3, p5.cross(p6)/t3);
r=o.dis(a);
}
}; Disc MinDisc(vector<P> &p){
if(p.size()<=) return Disc();
random_shuffle(p.begin(), p.end());
Disc d(p[], p[]);
for(int i=; i<p.size(); i++)
if(!d.cover(p[i])){
d=Disc(p[], p[i]);
for(int j=; j<i; j++)
if(!d.cover(p[j])){
d=Disc(p[i], p[j]);
for(int k=; k<j; k++)
if(!d.cover(p[k]))
d=Disc(p[i], p[j], p[k]);
}
}
return d;
}
最小圆覆盖(Smallest Enclosing Discs)的更多相关文章
- 【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 ...
随机推荐
- 我为什么反对推荐新人编程C/C++语言入门?
虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...
- esc设置多站点 域名解析
你的域名是:a.com IP: 1.1.1.1 一 设置域名解析: 1.a.com 解析到 1.1.1.1 2.a.com 解析到 2.2.2.2 LOOP 二 到服务器上: 在1站点设置主机 ...
- POJ 3974 Palindrome
D - Palindrome Time Limit:15000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- 【转】【C#】ColorMatrix
ColorMatrix(色彩矩阵),是GDI+里用来调整图片色彩的矩阵. 什么是矩阵,说白了就是C#里的二维数组. 那么这个矩阵调整色彩的原理是什么,他是怎么来调整色彩的呢?这个要从线性代数里的矩阵相 ...
- 项目移植将eclipse里面的项目移植到intellij idea里面
怎么关联多个库 . A B C D,A依赖BC,D依赖A,怎么搞? 注意: as和idea里面,project是工作空间的意思,这里面model才是项目. 打开主项目D 打开已经存在的model 导 ...
- Solr(5.1.0) 与Tomcat 从0开始安装与配置
1.什么是Solr? Solr是一个基于Lucene的Java搜索引擎服务器.Solr 提供了层面搜索.命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式).它易于安装和配置 ...
- git的简介,安装以及使用
1git的简介 Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 2Linus一直痛恨的CVS及SVN都是集中式的版本控制系 ...
- poj1067-取石子游戏-wythoff博弈
打表找规律失败,搜了一下原来是wythoff博弈 /*------------------------------------------------------------------------- ...
- 5.HBase In Action 第一章-HBase简介(1.1.3 HBase的兴起)
Pretend that you're working on an open source project for searching the web by crawling websites and ...
- Asp.Net MVC 合并js或css请求
Step1:BundleConfig中注册 bundles.Add(new ScriptBundle("~/isValid").Include( "~/Scripts/ ...