BZOJ2823 [AHOI2012]信号塔 【最小圆覆盖】
题目链接
题解
最小圆覆盖模板
都懒得再写一次
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 1000005,maxm = 1000005,INF = 1000000000;
inline int read(){
	int out = 0,flag = 1; char c = getchar();
	while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
	while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
	return out * flag;
}
struct point{double x,y;}p[maxn],O;
int n;
double r;
double dis(const point& a,const point& b){
	return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double f(int i,int j,int k){
	double a = p[j].y * p[j].y - p[i].y * p[i].y + p[j].x * p[j].x - p[i].x * p[i].x;
	double b = p[k].y * p[k].y - p[j].y * p[j].y + p[k].x * p[k].x - p[j].x * p[j].x;
	double c = p[j].y - p[i].y,d = p[k].y - p[j].y;
	double e = 2 * (p[j].x - p[i].x) * d,ff = 2 * (p[k].x - p[j].x) * c;
	return (a * d - b * c) / (e - ff);
}
double g(int i,int j,int k){
	double a = p[j].y * p[j].y - p[i].y * p[i].y + p[j].x * p[j].x - p[i].x * p[i].x;
	double b = 2 * (p[j].y - p[i].y);
	double c = 2 * (p[j].x - p[i].x) * O.x;
	return (a - c) / b;
}
void cal2(int u,int v){
	O = (point){(p[u].x + p[v].x) / 2,(p[u].y + p[v].y) / 2};
	r = dis(p[u],p[v]) / 2;
	for (int i = 1; i < v; i++){
		if (dis(p[i],O) <= r) continue;
		O.x = f(u,v,i);
		O.y = g(u,v,i);
		r = sqrt((O.x - p[u].x) * (O.x - p[u].x) + (O.y - p[u].y) * (O.y - p[u].y));
	}
}
void cal1(int u){
	O = p[u]; r = 0;
	for (int i = 1; i < u; i++){
		if (dis(p[i],O) <= r) continue;
		cal2(u,i);
	}
}
void mincircle(){
	O = p[1];
	r = 0;
	for (int i = 2; i <= n; i++){
		if (dis(p[i],O) <= r) continue;
		cal1(i);
	}
}
int main(){
	srand(time(NULL));
	n = read();
	for (int i = 1; i <= n; i++) scanf("%lf%lf",&p[i].x,&p[i].y);
	random_shuffle(p + 1,p + 1 + n);
	mincircle();
	printf("%.2lf %.2lf %.2lf\n",O.x,O.y,r);
	return 0;
}
BZOJ2823 [AHOI2012]信号塔 【最小圆覆盖】的更多相关文章
- AHOI2012 信号塔 | 最小圆覆盖模板
		题目链接:戳我 最小圆覆盖. 1.枚举第一个点,考虑当前圆是否包含了这个点,如果没有,则把圆变成以这个点为圆心,半径为0的圆. 2.枚举第二个点,考虑圆是否包含了这个点,如果没有,则把圆变成以这两个点 ... 
- bzoj 2823: [AHOI2012]信号塔 最小圆覆盖
		题目大意: 给定n个点,求面积最小的园覆盖所有点.其中\(n \leq 10^6\) 题解: 恩... 刚拿到这道题的时候... 什么???最小圆覆盖不是\(O(n^3)\)的随机增量算法吗????? ... 
- BZOJ.2823.[AHOI2012]信号塔(最小圆覆盖 随机增量法)
		BZOJ 洛谷 一个经典的随机增量法,具体可以看这里,只记一下大体流程. 一个定理:如果一个点\(p\)不在点集\(S\)的最小覆盖圆内,那么它一定在\(S\bigcup p\)的最小覆盖圆上. 所以 ... 
- bzoj2823[AHOI2012]信号塔
		2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1190 Solved: 545[Submit][Status ... 
- bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖
		首先我写了个凸包就溜了 这是最小圆覆盖问题,今晚学了一下 先随机化点,一个个加入 假设当前圆心为o,半径为r,加入的点为i 若i不在圆里面,令圆心为i,半径为0 再重新从1~i-1不停找j不在圆里面, ... 
- [日常摸鱼]bzoj2823 [AHOI2012]信号塔
		题意:$n$个点,求最小圆覆盖,$n \leq 5e5$ 这题数据是随机的hhh 我们可以先求出凸包然后对凸包上的点求最小圆覆盖-(不过直接求应该也行?) 反正随便写好像都能过- #include&l ... 
- 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)
		[BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ... 
- 2018.07.04 BZOJ 2823: AHOI2012信号塔(最小圆覆盖)
		2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MB Description 在野外训练中,为了确保每位参加集训的成员安全,实时的掌握 ... 
- 【bzoj2823】 AHOI2012—信号塔
		http://www.lydsy.com/JudgeOnline/problem.php?id=2823 (题目链接) 题意 求最小圆覆盖 Solution 关于最小圆覆盖的做法,论文里面都有.其实真 ... 
随机推荐
- FCL中你不得不知的几种委托
			FCL中丰富的类库信息极大的方便了我们的编码,很多我们日常经常用到的类型,FCL中已经帮我们定义好,下面要介绍的就是FCL中定义好的几种委托类型,直接使用它们不仅能提高我们的编码效率,而且还能让我们的 ... 
- unity面试题二
			1.以下哪一个选项不属于Unity引擎所支持的视频格式文件(D) A.后缀为mov的文件 B.后缀为mpg的文件 C.后缀为avi的文件 D.后缀为swf的文件 2.Unity引擎使用的是左手坐标系还 ... 
- Jmeter 接口自动化执行报错 无法找到类或者类的方法
			写好的自动化测试脚本在PC以及mac book 都执行正确,但是放到linux集成环境时就一直报错,报错类似如下 [jmeter] // Debug: eval: nameSpace = NameSp ... 
- 【SpringCloud】第五篇: 路由网关(zuul)
			前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ... 
- 前后端分离.net core + vuejs + element
			查找一些资料,比较了elementui以及Iview,最终还是选择了elementui搭建前后端分离框架,废话少说了,开始搭建环境: 1.基础软件环境 vue开发环境安装: ①nodejs (我安装的 ... 
- (转载)Unity3d中的属性(Attributes)整理
			附加: float字段检视面板修改:[Range(1,10)] 对属性进行分组:[Header("xxx")] 工具栏中调用方法,类文件需在Editor文件夹中:[MenuIte( ... 
- JavaScript写的一个带AI的井字棋
			最近有一门课结束了,需要做一个井字棋的游戏,我用JavaScript写了一个.首先界面应该问题不大,用html稍微写一下就可以.主要是人机对弈时的ai算法,如何使电脑方聪明起来,是值得思考一下的.开始 ... 
- 2018(容斥定理 HDU6286)
			2018 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ... 
- Leetcode - 461. Hamming Distance n&=(n-1) (C++)
			1. 题目链接:https://leetcode.com/problems/hamming-distance/description/ 2.思路 常规做法做完看到评论区一个非常有意思的做法.用了n&a ... 
- AndroidUI设计之 布局管理器 - 详细解析布局实现
			写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ... 
