随机增量法:bzoj 1336 bzoj 1337 最小圆覆盖
1337: 最小圆覆盖
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 1170 Solved: 573
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
题目:求出n个点的最小圆覆盖
随机增量法:
①将数组重新打乱(random_shuffle()函数)
②假设已经求出了前i个点的最小圆覆盖为Ci,检查第i+1个点是否在圆内,如果在,则C(i+1)=Ci并继续判定下一个点,不在的话,就令C(i+1)的圆心为第1个点和第i+1个点连线的中点,半径为连线长度的一半,并执行步骤③
③重新检查前i个点是否在圆C(i+1)上,如果某个点j不在,就用类似步骤②的方法继续修改圆心和半径使得j点在圆C(i+1)上,并执行步骤④
④再来一次一模一样的检查过程,不过这次只要有点k不在圆上,就令圆C(i+1)的圆心为三角形(i, j, k)的外心并扩增圆C(i+1)的半径
搞定,复杂度O(n^3)不过平均复杂度只有O(n),证明略,应该很容易找到证明
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define eps 1e-8
typedef struct Point
{double x;double y;
}Point;
Point s[100005];
Point operator + (const Point a, const Point b)
{ Point k;k.x = a.x+b.x, k.y = a.y+b.y;return k;
}
Point operator - (const Point a, const Point b)
{Point k;k.x = a.x-b.x, k.y = a.y-b.y;return k;
}
Point operator / (const Point a, double x)
{Point k;k.x = a.x/x, k.y = a.y/x;return k;
}
Point operator * (const Point a, double x)
{Point k;k.x = a.x*x, k.y = a.y*x;return k;
}double Dist(Point a, Point b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
Point Waixin(Point a, Point b, Point c) //求三角形外接圆圆心(外心)
{Point ans;double a1, a2, b1, b2, c1, c2;a1 = 2*(b.x-a.x), b1 = 2*(b.y-a.y); c1 = (b.x*b.x)-(a.x*a.x)+(b.y*b.y)-(a.y*a.y);a2 = 2*(c.x-a.x), b2 = 2*(c.y-a.y); c2 = (c.x*c.x)-(a.x*a.x)+(c.y*c.y)-(a.y*a.y);if(fabs(a1)<eps)ans.y = c1/b1, ans.x = (c2-ans.y*b2)/a2;else if(fabs(b1)<eps)ans.x = c1/a1, ans.y = (c2-ans.x*a2)/b2;elseans.x = (c2*b1-c1*b2)/(a2*b1-a1*b2), ans.y = (c2*a1-c1*a2)/(b2*a1-b1*a2);return ans;
}
int main(void)
{Point P;double R;int n, i, j, k;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%lf%lf", &s[i].x, &s[i].y);random_shuffle(s+1, s+n+1);P = s[1], R = 0;for(i=2;i<=n;i++){if(Dist(P, s[i])-R>eps){P = (s[1]+s[i])/2;R = Dist(P, s[i]);for(j=2;j<=i-1;j++){if(Dist(P, s[j])-R>eps){P = (s[i]+s[j])/2;R = Dist(P, s[i]);for(k=1;k<=j-1;k++){if(Dist(P, s[k])-R>eps){P = Waixin(s[i], s[j], s[k]);R = Dist(P, s[i]);}}}}}}printf("%.3f\n", R);return 0;
}
随机增量法:bzoj 1336 bzoj 1337 最小圆覆盖相关推荐
- BZOJ 3564: [SHOI2014]信号增幅仪(随机增量法)
如果是个圆的话好办,如果是拉成椭圆呢?直接压回去!!! 然后随机增量法就行了 CODE: #include<cstdio> #include<iostream> #includ ...
- matlab模拟退火最小球覆盖,最小圆覆盖最小球覆盖 (增量法和模拟退火法)
这种题几乎一套板子走天下. 昨天做最小圆覆盖用的都是增量法,压根没看过退火模拟法,因为退火模拟法并不是很稳定.今天看最小球覆盖时发现用到了退火模拟法,于是看了看最小圆覆盖的退火模拟法,用退火板子提交直 ...
- bzoj 2654 bzoj 3675 总结
bzoj 2654 && bzoj 3675 总结 手动博客搬家: 本文发表于20180929 15:18:55, 原地址https://blog.csdn.net/suncongbo ...
- 文献记录(part68)--K- 近邻分类器鲁棒性验证:从约束放松法到随机平滑法
学习笔记,仅供参考,有错必纠 关键词:监督学习 , 对抗机器学习 , 对抗鲁棒性 , 鲁棒性验证 , K- 近邻分类器 K- 近邻分类器鲁棒性验证:从约束放松法到随机平滑法 摘要 本文研究 K- 近邻 ...
- 电导增量法matlab,基于变步长电导增量法MPPT研究.doc
基于变步长电导增量法MPPT研究 基于变步长电导增量法MPPT研究 [摘要]光伏电池的输出功率与太阳辐射和环境温度变化,若不加以控制,将不会以最大功率输出.本文提出了一种变步长电导增量法,在光伏发电系 ...
- 创建数组-直接法/增量法 namelengthmax isvarname iskeyword
立即学习:https://edu.csdn.net/course/play/24708/278792?utm_source=blogtoedu 直接构造法 1 行向量A=[1 2 3 4 5] 2 列 ...
- 【BZOJ-2618】凸多边形 计算几何 + 半平面交 + 增量法 + 三角剖分
2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 959 Solved: 489 [Submit][Statu ...
- Random Projection 随机投影法
Random Projection 随机投影法 Hercht-Neilseon: 简单的说就是当一个随机矩阵维数到达一定程度的时候,其转置和自身正交. J-L引理: 在高维空间中的点可以被线性地嵌入到 ...
- 线性与非线性规划:随机方向法
文章目录 前言 一.随机方向法 二.算法实现 1.算法步骤 2.算法细节 3.代码示例 4.示例 总结 前言 本系列涉及线性与非线性规划中的几种规划算法 1.本节介绍随机方向法 2.参考:陈宝林-最优 ...
最新文章
- ubuntu 下 SubLime Text2 使用之创建快捷方式
- 京东618:六年历程步步为营,京东商城的安全保卫战
- 算法杂货铺——k均值聚类(K-means)
- boost::mp11::mp_any_of_q相关用法的测试程序
- wordl流程图怎么写字_DLG的制作流程图
- linux——进程(创建、终止、等待、替换)
- Qt文档阅读笔记-Qt单元测试中模拟GUI事件
- Nova: 虚机的块设备总结 [Nova Instance Block Device]
- Eclipse下搭建Android的NDK开发环境
- COCOS2D-X之圆形进度条的一个简单Demo
- Windows系统历史版本简介
- 第二届广东省大学生网络攻防大赛 simple_re
- php 上传图片后反转,PHP想象将图像从CMYK转换为RGB反转图像
- 商业的本质 + 社交电商思考
- TPshop学习(1)Windows下安装TPshop
- 计算机控制台win10,Win10系统打开Windows控制台的方法
- shell脚本监控网站是否正常
- Matlab 计算显色指数(Ra,R1-R15)、CCT、duv、Lux、XYZ三刺激值、CIE1931x、CIE1931y
- 【IT实施培训那些事儿】
- 图像加权和制作鬼影---OpenCV-Python开发指南(2)
热门文章
- python能自学成功吗-想自学Python,如何才能坚持下来?
- 小学生python编程教程-围观~山东省的小学生Python编程入门都学的什么?
- python基础代码大全-【01】Python基础入门 (全)
- python能做什么项目-这十个Python实战项目,让你瞬间读懂Python!
- python发音-Python如何实现文本转语音
- 普通人学python有啥用-普通人为什么要学习Python
- 科学网—中文普通话语音识别DEMO,LilyMandarinSpeechRecognition V1.0 - 石自强的博文...
- lync显示无法找到服务器,Lync 2013 已知问题
- vue项目中使用lib-flexible解决移动端适配
- 【Redis笔记】数据结构和对象:字典