题意:给出四个点的坐标,现在判断第四个点是否在最小覆盖圆里面,如果在则输出Safe(注意包括边界),否则输出Danger.

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxx=1005;
const int inf=0x3f3f3f3f;
struct node{double x,y;
};
node b[maxx];
node o;
double R;
double sqr(double x){return x*x;
}
double dis(node a,node b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
double incircle(node a){if(dis(o,a)<=R){return true;}return false;
}
node solve(double a,double b,double c,double d,double e,double f){double y=(f*a-c*d)/(b*d-e*a);double x=(f*b-c*e)/(a*e-b*d);return ((node){x,y});
}
int main(){int n;int t;scanf("%d",&t);int count=1;while(t--){for(int i=1;i<=4;i++){scanf("%lf %lf",&b[i].x,&b[i].y);}random_shuffle(b+1,b+n+1);R=0;for(int i=1;i<4;i++){if(!incircle(b[i])){o.x=b[i].x;o.y=b[i].y;R=0;for(int j=1;j<i;j++){if(!incircle(b[j])){o.x=(b[i].x+b[j].x)/2;o.y=(b[i].y+b[j].y)/2;R=dis(o,b[i]);for(int k=1;k<j;k++){if(!incircle(b[k])){o=solve(b[i].x-b[j].x,b[i].y-b[j].y,(sqr(b[j].x)-sqr(b[i].x)+sqr(b[j].y)-sqr(b[i].y))/2,b[i].x-b[k].x,b[i].y-b[k].y,(sqr(b[k].x)-sqr(b[i].x)+sqr(b[k].y)-sqr(b[i].y))/2);R=dis(b[i],o);}}}}}}double x=(b[4].x-o.x);double y=(b[4].y-o.y);double dist=sqrt(x*x+y*y);cout<<"Case #"<<count++<<": ";if(dist<=R){cout<<"Danger"<<endl;}else{cout<<"Safe"<<endl;}} return 0;
}

方法二:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
const double sep=1e-3;
const double base=0.98;
const int maxx=1e3+5;
struct node{double x,y;
}t[maxx];
int n;
double x,y;
double dis(node a,node b){double x=(a.x-b.x);double y=(a.y-b.y);return sqrt(x*x+y*y);
}
void solve(){double ans=10000.0,temp=100.0,maxlen;node mid;mid.x=mid.y=0;int s=0;while( temp>sep ){maxlen=0;    for( int i=1 ; i<4 ; i++ ){if( maxlen<dis(mid,t[i]) ){maxlen=dis(mid,t[i]);s=i;}}ans=min(ans,maxlen);mid.x+=(t[s].x-mid.x)/maxlen*temp;mid.y+=(t[s].y-mid.y)/maxlen*temp;temp*=base;}double xx=mid.x-t[4].x;double yy=mid.y-t[4].y;double dist=sqrt(xx*xx+yy*yy);if(dist>ans){cout<<"Safe"<<endl;}else{cout<<"Danger"<<endl;}
}int main(){int count=1;int tt;scanf("%d",&tt);while(tt--){for( int i=1 ; i<=4 ; i++ ){scanf("%lf %lf",&t[i].x,&t[i].y);}cout<<"Case #"<<count++<<": ";solve();}return 0;
}

HDU4720(最小圆覆盖问题)相关推荐

  1. HDU2215(最小圆覆盖问题)

    题意:就是求最小圆覆盖问题 方法一: #include<iostream> #include<algorithm> #include<cmath> #include ...

  2. 【hdoj】3007 Buried memory 【计算几何--最小圆覆盖】

    传送门:Buried memory 苍天饶过谁,第三次在hdoj上 交计算几何的题了,没一次是AC的. ┭┮﹏┭┮都是模板题啊,我都是抄板子的啊,为什么会这样,我怎么这么菜. 题意: 求最小圆覆盖 的 ...

  3. hdu 2215(最小圆覆盖)

    解题思路:最小圆覆盖,注意由于树也有半径,所以要加上树的半径0.5 #include<iostream> #include<cmath> #include<cstdio& ...

  4. POJ 2069最小球覆盖 HDU3007最小圆覆盖【模拟淬火算法】

    POJ 2069最小球覆盖 1.给定N个三维点,要求覆盖这些点的最小球半径: 2.采用模拟淬火算法,随机选取一个点作为初始解,然后不断向当前最远的点靠近: 3.这是一个不断调整的过程,对应模拟淬火算法 ...

  5. ZOJ - 1450 Minimal Circle HDU - 3007 Buried memory 最小圆覆盖模板 【随机函数】【增量法】

    题意 给N个点,求最小的圆将这N个点全部覆盖,输出圆心坐标和半径 分析 最小的圆肯定落在三个点上,因此暴力枚举圆上的三个点即可,点增量算法O(n ^ 3),加入随机化,平均复杂度可以降到O(n^2) ...

  6. P1742 最小圆覆盖

    P1742 最小圆覆盖 题意: 给出N个点,让你画一个最小的包含所有点的圆. 题解: 先说结论: 最优解的圆一定是在以某两个点连线为直径的圆 或者 某三个点组成的三角形的外接圆 初始化将某个圆心定为第 ...

  7. ZOJ 1450 Minimal Circle 点集的最小圆覆盖

    From: http://blog.csdn.net/zmx354/article/details/17076267 给定一个点集,求出能覆盖点集内所有点的半径最小的圆.包含点在圆上的情况.个人感觉算 ...

  8. luoguP1742 最小圆覆盖

    最小圆覆盖 首先 没错,我是个蒟蒻.luogu 流程 圆 C; for(i=1 to n) {if(P[i] 不在 C 内) {C = {P[i], 0};for(j=1 to i-1) {if(P[ ...

  9. 随机增量法:bzoj 1336 bzoj 1337 最小圆覆盖

    1337: 最小圆覆盖 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1170  Solved: 573 [Submit][Status][Discus ...

  10. python画图:小圆覆盖大圆问题

    小圆覆盖大圆 MATLAB实现:https://blog.csdn.net/qq_41845823/article/details/120324970 用至少多少个半径为r的小圆覆盖半径为R的大圆 是 ...

最新文章

  1. 开发转测试没人要_入行或转行软件测试(测试开发)要怎么学
  2. 太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)
  3. python grpc_python中grpc的使用示例
  4. 记录一下Memcached的用法:
  5. Smart field 1 how is smartField controller loaded - how is main view defined in manifest.json
  6. c++ gzip java.util.zip.gzip_java.util.zip.GZIPInputStream.close()方法示例
  7. 位运算 —— 一个数二进制形式尾端为 0 的个数
  8. 实现粗糙表面_爬墙吸盘黑科技成真,还能搞定粗糙表面:浙大提出旋转水涡吸附系统...
  9. 金蝶k3数据库服务器信息,金蝶k3如何查询连接的服务器配置
  10. linux tar解压bin文件,linux下 tar解压 gz解压 bz2等各种解压文件使用方法
  11. Steam 界面布局出错的问题
  12. 一分钟给大量视频褪色并加马赛克
  13. 华为交换机 查ip冲突_怎么查看华为交换机已绑定的ip与mac
  14. linux内核 异常 log,Kernel Exception 问题分析
  15. linux上命令调用smplayer,Linux播放器——RedHat下MPlayer和SMPlayer的安装
  16. C语言变量的存储方式和生存期
  17. Linux从一般用户切换到root用户
  18. java实现信用卡免息_Java信用卡分期手续费算法
  19. 微信小程序连接蓝牙ble教程(目录)
  20. 电脑c盘不够用怎么扩容,磁盘c怎么扩展

热门文章

  1. 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度
  2. Pytorch中的向前计算(autograd)、梯度计算以及实现线性回归操作
  3. MATLAB_no.1:入门作业_histeq():_imhist()_(男孩的三个图,以及文字描述)
  4. 无人驾驶 | 为什么双目自动驾驶系统难以普及?
  5. 堆、栈、方法区、静态代码块---Java
  6. Clever Answers in Codewar(Javascript 持续更新)
  7. leetcode 5 :Longest Palindromic Substring 找出最长回文子串
  8. EditText中的几个常用属性
  9. 2014“云”盘点:改变着的互联网和被改变的云计算
  10. 快速得到两个list中不同部分的list