题意:$n$个点,求最小圆覆盖,$n \leq 5e5$


这题数据是随机的hhh

我们可以先求出凸包然后对凸包上的点求最小圆覆盖…(不过直接求应该也行?)

反正随便写好像都能过…

#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
using namespace std;
const int N=500005;
struct Point
{
double x,y;
int rnd;
Point(double x=0,double y=0):x(x),y(y){}
}p[N],s[N];
struct Line
{
double k,b;
};
inline bool cmp1(Point a,Point b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
inline bool cmp2(Point a,Point b)
{
return a.rnd<b.rnd;
}
inline Point operator +(Point a,Point b)
{
return Point(a.x+b.x,a.y+b.y);
}
inline Point operator -(Point a,Point b)
{
return Point(a.x-b.x,a.y-b.y);
} inline Point operator /(Point a,double d)
{
return Point(a.x/d,a.y/d);
}
inline double cross(Point a,Point b)
{
return a.x*b.y-a.y*b.x;
}
inline double sqr2(double x)
{
return x*x;
}
inline double dist(Point a,Point b)
{
return sqrt(sqr2(a.x-b.x)+sqr2(a.y-b.y));
}
inline Line getLine(double k,Point a)
{
Line res;res.k=k;
res.b=a.y-a.x*k;
return res;
}
inline Point getLineIntersection(Line l1,Line l2)
{
Point res;
res.x=(l2.b-l1.b)/(l1.k-l2.k);
res.y=res.x*l1.k+l1.b;
return res;
}
inline Point getCircle(Point a,Point b,Point c)
{
Point p1=(a+b)/2,p2=(a+c)/2;
double k1=-(b.x-a.x)/(b.y-a.y);
double k2=-(c.x-a.x)/(c.y-a.y);
Line l1=getLine(k1,p1),l2=getLine(k2,p2);
return getLineIntersection(l1,l2);
}
inline Point minCircle(double &r,int n)
{
for(register int i=1;i<=n;i++)s[i].rnd=rand();
sort(s+1,s+n+1,cmp2);
Point o=s[1];r=0;
for(register int i=2;i<=n;i++)if(r<dist(o,s[i]))
{
o=s[i];r=0;
for(register int j=1;j<i;j++)if(r<dist(o,s[j]))
{
o=(s[i]+s[j])/2;
r=dist(o,s[i]);
for(register int k=1;k<j;k++)if(r<dist(o,s[k]))
{
o=getCircle(s[i],s[j],s[k]);
r=dist(o,s[i]);
}
}
}
return o;
}
inline int convexHull(int n)
{
sort(p+1,p+n+1,cmp1);
int t=0,k;
for(register int i=1;i<=n;i++)
{
while(t>1&&cross(s[t]-s[t-1],p[i]-s[t-1])<0)t--;
s[++t]=p[i];
}
k=t;
for(register int i=n-1;i>=1;i--)
{
while(t>k&&cross(s[t]-s[t-1],p[i]-s[t-1])<0)t--;
s[++t]=p[i];
}
if(n>1)t--;
return t;
}
int main()
{
int n;scanf("%d",&n);
for(register int i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
int t=convexHull(n);double r;
Point res=minCircle(r,t);
printf("%.2lf %.2lf %.2lf",res.x,res.y,r);
return 0;
}

[日常摸鱼]bzoj2823 [AHOI2012]信号塔的更多相关文章

  1. bzoj2823[AHOI2012]信号塔

    2823: [AHOI2012]信号塔 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1190  Solved: 545[Submit][Status ...

  2. BZOJ2823 [AHOI2012]信号塔 【最小圆覆盖】

    题目链接 BZOJ2823 题解 最小圆覆盖模板 都懒得再写一次 #include<iostream> #include<cstdio> #include<cmath&g ...

  3. bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖

    首先我写了个凸包就溜了 这是最小圆覆盖问题,今晚学了一下 先随机化点,一个个加入 假设当前圆心为o,半径为r,加入的点为i 若i不在圆里面,令圆心为i,半径为0 再重新从1~i-1不停找j不在圆里面, ...

  4. 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)

    [BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...

  5. 2018.07.04 BZOJ 2823: AHOI2012信号塔(最小圆覆盖)

    2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MB Description 在野外训练中,为了确保每位参加集训的成员安全,实时的掌握 ...

  6. 【bzoj2823】 AHOI2012—信号塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=2823 (题目链接) 题意 求最小圆覆盖 Solution 关于最小圆覆盖的做法,论文里面都有.其实真 ...

  7. (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)

    bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...

  8. 【BZOJ】2823: [AHOI2012]信号塔

    题意 给\(n\)个点,求一个能覆盖所有点的面积最小的圆.(\(n \le 50000\)) 分析 随机增量法 题解 理论上\(O(n^3)\)暴力,实际上加上随机化后期望是\(O(n)\)的. 算法 ...

  9. BZOJ 2823: [AHOI2012]信号塔

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2823 随机增量法.不断加点维护圆,主要是三点共圆那里打得烦(其实也就是个两中垂线求交点+联立方 ...

随机推荐

  1. Jmeter监控插件

    Jmeter-Plugins支持CPU.Memory.Swap.Disk和Network的监控,在测试过程中更加方便进行结果收集和统计分析. 一.准备工作: 1.下载Jmeter-Plugins插件, ...

  2. 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能

    问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...

  3. 基于chaosblade的故障注入平台小试

    当今社会互联网应用越来越广泛,用户量日益剧增.在人们对互联网服务的依赖性增大的同时,也对服务的可用性和体验感有了更高的要求.那么如何保障服务在运营过程中能一直给用户提供稳定的.不间断的.可靠可信的服务 ...

  4. 使用Beyond Compare对比大篇幅文件的小技巧

    我们在编辑较大篇幅的文章时,无可避免地要经过多次的修改.有时候修改的版本过多时,我们很可能就会记不清最新版的文章对比上一版的文章,究竟修改了哪些地方.但有了Beyond Compare(Windows ...

  5. IDM下载器添加支持自动下载的文件类型

    不知道各位读者老爷有没有试过IDM下载器的自动下载功能,对于经常需要下载素材资源的朋友来说,一个个的选择图片或者其他什么素材来下载也是够烦的,IDM的自动下载功能可谓是十分好用,而且自动下载+批量下载 ...

  6. leetcode 33和 leetcode81

    //感想: 1.对于这两题,我真的是做到吐,这篇博客本来是昨晚准备写的,但是对于这个第二题,我真的做到头痛,实在是太尼玛的吐血了,主要是我也是头铁,非要找到那个分界点. 2.其实之前在牛客网上做过非常 ...

  7. 无效的HTTP_主机头Invalid HTTP_HOST header: '192.168.56.100:8888'. You may need to add '192.168.56.100' to ALLOWED_HOSTS.

    Invalid HTTP_HOST header: '192.168.56.100:8888'. You may need to add '192.168.56.100' to ALLOWED_HOS ...

  8. 盘点腾讯Linux、 C++后台开发面试题,做好充足准备,不怕被Pass

    一.C/C++   ​ const 多态 什么类不能被继承 二.网络   ​ 网络的字节序 网络知识 TCP三次握手 各种细节 timewait状态 TCP与UDP的区别 概念 适用范围 TCP四次挥 ...

  9. java面试复习重点:类的管理及常用工具,教你抓住面试的重点!

    java复习: 类的管理及常用工具类 包 写在程序文件的第一行 一个Java 源文件中只能声明一个包, 且声明语句只能作为源文件的第一条指令 导入类能导入非public类,但是不能用因为在其他包缺省的 ...

  10. SpringCloud 源码系列(1)—— 注册中心 Eureka(上)

    Eureka 是 Netflix 公司开源的一个服务注册与发现的组件,和其他 Netflix 公司的服务组件(例如负载均衡.熔断器.网关等)一起,被 Spring Cloud 整合为 Spring C ...