BZOJ 2823: [AHOI2012]信号塔
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2823
随机增量法。不断加点维护圆,主要是三点共圆那里打得烦(其实也就是个两中垂线求交点+联立方程求交点而已TAT。。
- #include<cstring>
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- #define rep(i,l,r) for (int i=l;i<=r;i++)
- #define down(i,l,r) for (int i=l;i>=r;i--)
- #define clr(x,y) memset(x,y,sizeof(x))
- #define maxn 1000009
- #define eps 1e-6
- using namespace std;
- typedef unsigned long long ll;
- struct P{double x,y;
- }a[maxn],o;
- double r;
- int n;
- int read(){
- int x=,f=; char ch=getchar();
- while (!isdigit(ch)){
- if (ch=='-') f=-; ch=getchar();
- }
- while (isdigit(ch)){
- x=x*+ch-''; ch=getchar();
- }
- return x*f;
- }
- P get2(P a,P b){
- P tmp;
- tmp.x=(a.x+b.x)/; tmp.y=(a.y+b.y)/;
- return tmp;
- }
- double sqr(double x){
- return x*x;
- }
- double dis(P a,P b){
- return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
- }
- P cross(double a1,double a2,double b1,double b2,double c1,double c2){
- P tmp;
- tmp.x=(c2*b1-c1*b2)/(a1*b2-a2*b1); tmp.y=(c2*a1-c1*a2)/(b1*a2-b2*a1);
- return tmp;
- }
- P get3(P a,P b,P c){
- P tmp;
- double a1=b.x-a.x,b1=b.y-a.y,c1=(sqr(a.y)-sqr(b.y)+sqr(a.x)-sqr(b.x))/;
- double a2=c.x-a.x,b2=c.y-a.y,c2=(sqr(a.x)+sqr(a.y)-sqr(c.x)-sqr(c.y))/;
- return tmp=cross(a1,a2,b1,b2,c1,c2);
- }
- int cmp(double x){
- if (fabs(x)<eps) return ;
- if (x>) return ;
- return -;
- }
- int main(){
- n=read();
- rep(i,,n){
- scanf("%lf%lf",&a[i].x,&a[i].y);
- }
- int x,y;
- rep(i,,n) {
- x=rand()%n+; y=rand()%n+;
- swap(a[x],a[y]);
- }
- o=a[]; r=;
- rep(i,,n){
- if (cmp(dis(a[i],o)-r)<) continue;
- o=a[i]; r=;
- rep(j,,i-){
- if (cmp(dis(a[j],o)-r)<) continue;
- o=get2(a[i],a[j]); r=dis(a[j],o);
- rep(k,,j-) {
- if (cmp(dis(a[k],o)-r)<) continue;
- o=get3(a[i],a[j],a[k]); r=dis(a[k],o);
- }
- }
- }
- printf("%.2lf %.2lf ",o.x,o.y);
- printf("%.2lf\n",r);
- return ;
- }
BZOJ 2823: [AHOI2012]信号塔的更多相关文章
- 2018.07.04 BZOJ 2823: AHOI2012信号塔(最小圆覆盖)
2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MB Description 在野外训练中,为了确保每位参加集训的成员安全,实时的掌握 ...
- BZOJ.2823.[AHOI2012]信号塔(最小圆覆盖 随机增量法)
BZOJ 洛谷 一个经典的随机增量法,具体可以看这里,只记一下大体流程. 一个定理:如果一个点\(p\)不在点集\(S\)的最小覆盖圆内,那么它一定在\(S\bigcup p\)的最小覆盖圆上. 所以 ...
- bzoj 2823: [AHOI2012]信号塔 最小圆覆盖
题目大意: 给定n个点,求面积最小的园覆盖所有点.其中\(n \leq 10^6\) 题解: 恩... 刚拿到这道题的时候... 什么???最小圆覆盖不是\(O(n^3)\)的随机增量算法吗????? ...
- 【BZOJ】2823: [AHOI2012]信号塔
题意 给\(n\)个点,求一个能覆盖所有点的面积最小的圆.(\(n \le 50000\)) 分析 随机增量法 题解 理论上\(O(n^3)\)暴力,实际上加上随机化后期望是\(O(n)\)的. 算法 ...
- bzoj2823[AHOI2012]信号塔
2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1190 Solved: 545[Submit][Status ...
- 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)
[BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...
- 【bzoj2823】 AHOI2012—信号塔
http://www.lydsy.com/JudgeOnline/problem.php?id=2823 (题目链接) 题意 求最小圆覆盖 Solution 关于最小圆覆盖的做法,论文里面都有.其实真 ...
- (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)
bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...
- AHOI2012 信号塔 | 最小圆覆盖模板
题目链接:戳我 最小圆覆盖. 1.枚举第一个点,考虑当前圆是否包含了这个点,如果没有,则把圆变成以这个点为圆心,半径为0的圆. 2.枚举第二个点,考虑圆是否包含了这个点,如果没有,则把圆变成以这两个点 ...
随机推荐
- ios 中的循环引用问题及解决
循环引用,指的是多个对象相互引用时,使得引用形成一个环形,导致外部无法真正是否掉这块环形内存.其实有点类似死锁. 举个例子:A->B->C->....->X->B - ...
- dispatch_sync和dispatch_async的区别
dispatch_sync 线程同步.dispatch_async线程异步 比如 //同步 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE ...
- Android Activity生命周期详细解析
概况 讲Android Activity那怎么都绕不过这张图,这篇文章也是围绕这幅图详细分析. 背景 假设这是你的APP,以此为背景,下面的每个part请结合上图理解. #Case 1 当按下app启 ...
- CJOJ 血帆海盗
Description 随着资本的扩大,藏宝海湾贸易亲王在卡利姆多和东部王 国大陆各建立了N/2 个港口.大灾变发生以后,这些港口之间失去了联系,相继脱离了藏宝海湾贸易亲王的管辖,各自为政.利益的驱动 ...
- weex Mac开发环境
安装: 1.java的jdk下载和安装 1-1.下载.安装:省略 1-2.配置 第一步:命令行内输入touch .bash_profile命令,生成.bash_profile的隐藏配置文件,用于配置j ...
- 房上的猫:for循环,跳转语句与循环结构,跳转语句进阶
一.for循环 1.定义: for循环语句的主要作用是反复执行一段代码,直到满足一定条件为止 2.组成部分: (1)初始部分:设置循环的初始状态 (2)循环体:重复执行的代码 (3)迭代部分: ...
- Jupyter Notebook使用小技巧
在 C:\Windows\Fonts目录下找到Mircosoft YaHei UI字体,然后复制到[你的Python安装路径]/Lib/site-packages/matplotlib/mpl-dat ...
- 微信小程序开发教程目录
本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...
- jQuery 选择器 (一)
选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $( ...
- javascript函数与表达式
函数的定义 函数声明 由三部分组成:函数名,函数参数,函数体 函数体没有使用return关键字返回函数时,函数调用时返回默认的undefined:如果有使用return语句,则返回指定内容 funct ...