ZOJ 1450 Minimal Circle 最小圆覆盖
套了个模板直接上,貌似没有随机化序列 QAQ
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define ll long long
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
using namespace std; const int INF = 0x3f3f3f3f;
const int MAXN = ;
const double eps = 1e-; struct POINT{
double x;
double y;
POINT() : x(), y() {};
POINT(double _x_, double _y_) : x(_x_), y(_y_) {};
}; struct CIRCLE{
POINT p;
double r;
CIRCLE() {};
CIRCLE(POINT _p_, double _r_) : p(_p_), r(_r_) {};
}; double dist(POINT a,POINT b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} CIRCLE calc(POINT p1,POINT p2,POINT p3){//三点的外接圆圆心的函数:
CIRCLE temp;
double a,b,c,d,e,f;
a = p2.x - p1.x;
b = p2.y - p1.y;
c = (p2.x * p2.x + p2.y * p2.y - p1.x * p1.x - p1.y * p1.y) / ;
d = p3.x - p1.x;
e = p3.y - p1.y;
f = (p3.x * p3.x + p3.y * p3.y - p1.x * p1.x - p1.y * p1.y) / ;
temp.p.y = (c * d - f * a) / (b * d - e * a);
temp.p.x = (c * e - f * b) / (a * e - b * d);
return temp;
}
CIRCLE minC(POINT *p,int n){
CIRCLE O;
int i,j,k;
O.p = p[];
O.r = ;
for(i= ; i < n ; i++){
if(dist(O.p,p[i]) <= O.r + eps) continue;
O.p = p[i];O.r = ;
for(j = ; j < i; j++){
if(dist(O.p,p[j]) <= O.r + eps) continue;
O.p.x = (p[i].x + p[j].x) / ;
O.p.y = (p[i].y + p[j].y) / ;
O.r = dist(O.p,p[j]);
for(k = ; k < j; k++){
if(dist(O.p,p[k]) <= O.r + eps) continue;
O = calc(p[i],p[j],p[k]);
O.r = dist(O.p,p[k]);
}
}
}
return O;
} int main(){
int i, j, n;
POINT p[];
while(EOF != scanf("%d",&n)){
if(n == ) break;
for(i = ; i < n; ++i)
scanf("%lf%lf",&p[i].x,&p[i].y);
CIRCLE c = minC(p, n);
printf("%.2f %.2f %.2f\n",c.p.x,c.p.y,c.r);
}
return ;
}
ZOJ 1450 Minimal Circle 最小圆覆盖的更多相关文章
- zoj 1450 Minimal Circle 最小覆盖圆
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=450 You are to write a program to fi ...
- ZOJ1450 Minimal Circle 最小圆覆盖
ZOJ1450 给定N个点(N<=100)求最小的圆把这些点全部覆盖 考虑对于三角形,可以唯一的找到外接圆,而多边形又可以分解为三角形,所以对于多边形也可以找到唯一的最小覆盖圆. #includ ...
- HDU 3007 Buried memory & ZOJ 1450 Minimal Circle
题意:给出n个点,求最小包围圆. 解法:这两天一直在学这个神奇的随机增量算法……看了这个http://soft.cs.tsinghua.edu.cn/blog/?q=node/1066之后自己写了好久 ...
- ZOJ1450 Minimal Circle
You are to write a program to find a circle which covers a set of points and has the minimal area. T ...
- [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】
题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...
- [BZOJ 1336] [Balkan2002] Alien最小圆覆盖 【随机增量法】
题目链接:BZOJ - 1336 题目分析 最小圆覆盖有一个算法叫做随机增量法,看起来复杂度像是 O(n^3) ,但是可以证明其实平均是 O(n) 的,至于为什么我不知道= = 为什么是随机呢?因为算 ...
- 【做题】POI2011R1 - Plot——最小圆覆盖&倍增
原文链接 https://www.cnblogs.com/cly-none/p/loj2159.html 题意:给出\(n\)个点,你需要按编号将其划分成不超过\(m\)段连续的区间,使得所有每个区间 ...
- 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)
[BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...
- bzoj 1336 最小圆覆盖
最小圆覆盖 问题:给定平面上的一个点集,求半径最小的一个圆,使得点集中的点都在其内部或上面. 随机增量算法: 定义:点集A的最小圆覆盖是Circle(A) 定理:如果Circle(A)=C1,且a不被 ...
随机推荐
- python的map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于list [1, 2 ...
- [LeetCode]题解(python):126-Word Ladder II
题目来源: https://leetcode.com/problems/word-ladder-ii/ 题意分析: 给定一个beginWord和一个endWord,以及一个字典单词,找出所有从begi ...
- 09-C语言数组
目录: 一.使用xcode编辑工具 二.数组 三.数组遍历 四.多维数组 回到顶部 一.使用xcode编辑工具 1 打开xcode程序 2 创建一个项目 OSX -> Application - ...
- CreateFile,ReadFile等API详解(或者说MSDN的翻译)
一.*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象.通信资源对象.目录对象(只能打开).磁盘设备对象.文件对象.邮槽对象.管道 ...
- vs linq to db template
linq to db template 支持sqlite. mysql .db2. accress. oracle. Firebird等多种数据库以linq方式操作数据. NuGet NuGet 是 ...
- Hibernate_13_QBC查询
Employee类.Department类.SessionFactoryTools类.Employee.hbm.xml文件.Department.hbm.xml文件.Hibernate.cfg.xml ...
- android编译系统的makefile文件Android.mk写法如下
(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:LOCAL_PATH:=$(c ...
- 解决 win10 预览版开始菜单打不开的问题
除了该文章[http://jingyan.baidu.com/article/64d05a025d2668de55f73b9e.html]里面说的解决方法之外,我只加上一点 . 打开本机防火墙,或者调 ...
- Oracle查询数据中占用空间最大的表
--第一步,查询istaudit数据库文件ID,文件路径 select file#,name from v$datafile where lower(name) like '%istaudit.dbf ...
- URAL 1225 Flags
题目:click here #include <bits/stdc++.h> using namespace std; typedef long long ll; ; int n; ll ...