bzoj2823
最小圆覆盖
有个东西叫作随机增量法,具体可以baidu
这里来说说怎么求三点共圆
这其实就是求两条线段的交点
在编程中,我们解方程是比较麻烦的一个比较好的方法是利用相似三角形
设线段AB,CD交P,则PC:PD=Sabc:Sabd
然后用定比分点就可以求的交点坐标了
const eps=1e-6; type point=record
x,y:double;
end; var p:array[..] of point;
i,n,j,k:longint;
r:double; procedure swap(var a,b:point);
var c:point;
begin
c:=a;
a:=b;
b:=c;
end; function dis(i,j:longint):double;
begin
exit(sqrt(sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y)));
end; function cov(i:longint):boolean;
begin
if dis(i,)-r>eps then exit(false)
else exit(true);
end; procedure little(i,j:longint);
begin
p[].x:=(p[i].x+p[j].x)/;
p[].y:=(p[i].y+p[j].y)/;
r:=dis(i,j)/;
end; function cross(x1,y1,x2,y2:double):double;
begin
exit(x1*y2-x2*y1);
end; procedure circle(i,j,k:longint);
var ret,xa,ya,xb,yb,xc,yc,xd,yd,t1,t2:double;
begin
ret:=/dis(i,j);
xa:=(p[i].x+p[j].x)/; ya:=(p[i].y+p[j].y)/;
xb:=xa-ret*(p[i].y-p[j].y); yb:=ya+ret*(p[i].x-p[j].x);
ret:=/dis(j,k);
xc:=(p[j].x+p[k].x)/; yc:=(p[j].y+p[k].y)/;
xd:=xc-ret*(p[j].y-p[k].y); yd:=yc+ret*(p[j].x-p[k].x);
t1:=cross(xc-xa,yc-ya,xb-xa,yb-ya);
t2:=cross(xb-xa,yb-ya,xd-xa,yd-ya);
p[].x:=(t1*xd+t2*xc)/(t1+t2);
p[].y:=(t1*yd+t2*yc)/(t1+t2);
r:=dis(,i);
end; begin
readln(n);
for i:= to n do
begin
readln(p[i].x,p[i].y);
swap(p[i],p[trunc(random*i)+]);
end;
little(,);
for i:= to n do
if not cov(i) then
begin
little(,i);
for j:= to i- do
if not cov(j) then
begin
little(i,j);
for k:= to j- do
if not cov(k) then circle(i,j,k);
end;
end;
writeln(p[].x::,' ',p[].y::,' ',r::);
end.
bzoj2823的更多相关文章
- 【bzoj2823】 AHOI2012—信号塔
http://www.lydsy.com/JudgeOnline/problem.php?id=2823 (题目链接) 题意 求最小圆覆盖 Solution 关于最小圆覆盖的做法,论文里面都有.其实真 ...
- 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)
[BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...
- BZOJ2823 [AHOI2012]信号塔 【最小圆覆盖】
题目链接 BZOJ2823 题解 最小圆覆盖模板 都懒得再写一次 #include<iostream> #include<cstdio> #include<cmath&g ...
- (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)
bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...
- bzoj2823[AHOI2012]信号塔
2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1190 Solved: 545[Submit][Status ...
- [BZOJ2823][BZOJ1336][BZOJ1337]最小圆覆盖(随机增量法)
算法介绍网上有很多,不解释了. 给出三点坐标求圆心方法:https://blog.csdn.net/liyuanbhu/article/details/52891868 记得先random_shuff ...
- 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 ...
- BZOJ 刷题记录 PART 6
[BZOJ2709]水的二分加验证.可是好像被读入萎到了... [BZOJ3229]强大的算法见此.被机房的一堆大神"推荐".于是被坑了...写了一个下午... [BZOJ3631 ...
随机推荐
- iOS上用FTGL显示定制Truetype字体碰到的问题
没想到这个问题搞了快2个月时间:当然跟我只是断断续续地工作有关. FTGL是freetype的opengl实现.我接触FTGL最初只是为了练习OpenGL,写几个简单的游戏app.开始试了试FTGL觉 ...
- switch..case函数的基础使用一
基本作用:switch中的参数与case的值进行比对,相等则进入case. JDK1.7 switch支持int.Integer.String类型 package com.my.test; impor ...
- 设置配置文件信息时的classpath
首先 classpath是指 WEB-INF文件夹下的classes目录 其中:lib和classes下文件访问优先级的问题: lib>classes classpath 和 classpa ...
- could not open XXX permission denied
http://www.cplusplus.com/forum/beginner/104404/3/ -std=c++11 -std=gnu++11 Then you probably just don ...
- 基于EBP的栈帧
程序的OEP,一开始以 push ebp 和mov ebp esp这两句开始. 原因:c程序的开始是以一个主函数main()为开始的,而函数在访问的过程中最重要的事情就是要确保堆栈的平衡,而在wi ...
- Linux安装python 2.7.9
1.下载python wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz 2.解压.编译安装 tar -zxvf Python- ...
- 任务调度 QUARTZ
任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能 闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 commo ...
- MethodInvoker 委托
MethodInvoker 提供一个简单委托,该委托用于调用含 void 参数列表的方法. 在对控件的 Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托. 下面的代码示例演 ...
- Ubuntu12.04 + 虚拟机VMware 9 + Secure CRT + EditPlus 本地C++开发环境搭建
1.1 软件准备 虚拟机VMware 9 Ubuntu 12.04 Secure CRT EditPlus 1.2 安装VMware 9与Ubuntu 12.04 这两个软件安装,按部就班,这里就 ...
- java基础知识回顾之java集合类-Properties集合
/** java.lang.Object |--java.util.Dictionary<K,V> |--java.util.Hashtable<Object,Obje ...