bzoj1337 最小圆覆盖 计算几何 解题报告
来源:互联网 发布:p2p网络终结者手机版 编辑:程序博客网 时间:2024/04/30 05:18
Description
给出平面上N个点,N<=10^5.请求出一个半径最小的圆覆盖住所有的点
Input
第一行给出数字N,现在N行,每行两个实数x,y表示其坐标.
Output
输出最小半径,输出保留三位小数.
Sample Input
4
1 0
0 1
0 -1
-1 0
Sample Output
1.000
思路
数据太弱了吧。。。。
代码
借鉴朱爷
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define N 100010struct Point{ double x,y; Point(double _ = .0,double __ = .0):x(_),y(__) {} Point operator +(const Point &a) {return Point(x+a.x,y+a.y);} Point operator -(const Point &a) {return Point(x-a.x,y-a.y);} Point operator *(double a) {return Point(x*a,y*a);} double operator * (const Point &a) {return x*a.x+y*a.y;} double operator ^ (const Point &a) {return x*a.y-y*a.x;}}p[N];struct Line{ Point p,v; Line(){} Line(Point _a,Point _b):p(_a),v(_b){}};struct Circle{ Point p;double R; Circle(){} Circle(Point _p,double _R):p(_p),R(_R){}}ans;double dis(Point a,Point b) {return sqrt((a-b)*(a-b));}bool in_cir(Point a,Circle b) {return dis(a,b.p)<=b.R;}Point get_intersection(Line &l1,Line &l2){ Point u=l1.p-l2.p; double tmp=(l2.v^u)/(l1.v^l2.v); return l1.p+l1.v*tmp; }Point rotate (Point a) {return Point(-a.y,a.x);}int n;int main(){// srand(19980402); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%lf%lf",&p[i].x,&p[i].y);// random_shuffle(p+1,p+n+1); for(int i=1;i<=n;++i) { if(!in_cir(p[i],ans)) { ans.p=p[i]; for(int j=1;j<i;++j) { if(!in_cir(p[j],ans)) { ans.p=(p[i]+p[j])*0.5; ans.R=dis(p[i],p[j])*0.5; for(int k=1;k<j;k++) { if(!in_cir(p[k],ans)) { Line l1((p[i]+p[j])*0.5,rotate(p[i]-p[j])); Line l2((p[i]+p[k])*0.5,rotate(p[i]-p[k])); ans.p=get_intersection(l1,l2); ans.R=dis(ans.p,p[i]); } } } } } } printf("%.3f",ans.R);}
阅读全文
1 0
- bzoj1337 最小圆覆盖 计算几何 解题报告
- Bzoj1336 Bzoj1337 最小圆覆盖
- [BZOJ1337]最小圆覆盖(最小圆覆盖)
- [计算几何笔记3]最小圆覆盖
- hdu3007Buried memory 最小圆覆盖 计算几何
- HDU 3932(计算几何+最小圆覆盖)
- HDU 4720(计算几何+最小圆覆盖)
- bzoj1336/1337/2823 最小圆覆盖 计算几何
- 【BZOJ2823】【AHOI2012】信号塔 最小圆覆盖 计算几何
- hdu5563解题报告(计算几何)
- Buried memory 简单几何之最小圆覆盖问题
- 计算几何 三点求最小圆
- 解题报告-HDU 2892 (计算几何)
- poj 1927 计算几何 解题报告
- BZOJ 1913 计算几何+排列组合 解题报告
- HDU 4798 计算几何 解题报告
- BZOJ 1356 计算几何 解题报告
- BZOJ 1337 计算几何 解题报告
- 从毕业到程序员,经历过的面试及经验分享
- Manjaro Linux 17.0.2 KDE环境安装、配置记录
- 机器学习笔记week2
- How to Push the Video streams to DouYu/XiongMao/Bilibili using PI
- 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析
- bzoj1337 最小圆覆盖 计算几何 解题报告
- C++空间分配器简述学习笔记
- sublime快捷键实现自动push
- Luogu P1314 [NOIp提高组2011]聪明的质监员
- C++语言对有理数的封装Rational
- Xshell连接虚拟机
- 17.8.19 校内赛 解题报告【求线段交点+凸包+求多边形面积】【判定点是否在多边形内】【二分答案+半平面交】
- apache2.4配置域名后,访问域名出现apache欢迎页
- PID学习实录