首先通过随机增量法求出最小覆盖圆,作为答案的上界。

然后二分答案,检验的时候枚举每个点作为原点,求出其他每个点被包括在圆内的角度区间,然后扫描线即可。

时间复杂度$O(Tn^2\log n)$。

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define N 510
using namespace std;
const double PI=acos(-1.0),eps=1e-8;
int n,K,i,j,k;double R,ansr,lim,l,r,mid;
struct P{
double x,y;
P(){}
P(double _x,double _y){x=_x,y=_y;}
}a[N],O,anso;
struct E{
double x;int t;
E(){}
E(double _x,int _t){x=_x,t=_t;}
}e[N<<2];
inline bool cmp(const E&a,const E&b){return a.x<b.x;}
inline double dis(const P&x,const P&y){
return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
}
inline P center(const P&x,const P&y,const P&z){
double a1=y.x-x.x,b1=y.y-x.y,
c1=(a1*a1+b1*b1)/2,a2=z.x-x.x,
b2=z.y-x.y,c2=(a2*a2+b2*b2)/2,
d=a1*b2-a2*b1;
return P(x.x+(c1*b2-c2*b1)/d,x.y+(a1*c2-a2*c1)/d);
}
inline bool exist(int S,double R){
int m=0;
for(int i=0;i<n;i++)if(i!=S){
if(dis(a[S],a[i])>R+R+eps)continue;
double A=atan2(a[i].y-a[S].y,a[i].x-a[S].x),
B=acos(dis(a[S],a[i])/(R+R));
e[m++]=E(A-B,1);
e[m++]=E(A+B,-1);
e[m++]=E(A-B+PI*2,1);
e[m++]=E(A+B+PI*2,-1);
}
sort(e,e+m,cmp);
for(int i=0,ret=1;i<m;i++)if((ret+=e[i].t)==K){
ansr=R;
anso=P(a[S].x+cos(e[i].x)*R,a[S].y+sin(e[i].x)*R);
return 1;
}
return 0;
}
inline bool check(double R){
for(int i=0;i<n;i++)if(exist(i,R))return 1;
return 0;
}
int main(){
scanf("%d%d",&n,&K);
for(i=0;i<n;i++)scanf("%lf%lf",&a[i].x,&a[i].y);
for(i=0;i<n;i++)swap(a[rand()%n],a[i]);
for(O=a[0],i=1;i<n;i++)if(dis(a[i],O)>R+eps)
for(O=a[i],R=0,j=0;j<i;j++)if(dis(a[j],O)>R+eps){
O=P((a[i].x+a[j].x)/2,(a[i].y+a[j].y)/2),R=dis(a[i],O);
for(k=0;k<j;k++)if(dis(a[k],O)>R+eps)O=center(a[k],a[j],a[i]),R=dis(a[i],O);
}
lim=ansr=R,anso=O;
r=ansr-eps;
while(l+eps<r){
lim/=2;
if(lim<1e-5)break;
mid=(l+r)/2;
if(check(mid))r=mid-eps;else l=mid+eps;
}
return printf("%.6f\n%.6f %.6f",ansr,anso.x,anso.y),0;
}

  

BZOJ1946 : [Ceoi2006]ANTENNA的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. Dipole Antenna : 2

    Characteristics of dipole antenna. %% % characteristics of dipole antenna % author : Leon % email:ya ...

  3. Half Wavelength Dipole Antenna

    Reference : 1. wikipedia The dipole antenna is the simplest and most widely used class of antenna.It ...

  4. POJ 3020 Antenna Placement

    Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5645 Accepted: 2825 Des ...

  5. Antenna Placement(匈牙利算法 ,最少路径覆盖)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6991   Accepted: 3466 ...

  6. poj 3020 最短路径覆盖 Antenna Placement

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7329   Accepted: 3635 ...

  7. Antenna Placement

    Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7574 Accepted: 3762 Des ...

  8. POJ3020——Antenna Placement(二分图的最大匹配)

    Antenna Placement DescriptionThe Global Aerial Research Centre has been allotted the task of buildin ...

  9. poj 3020 Antenna Placement(最小路径覆盖 + 构图)

    http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

随机推荐

  1. Elo rating system 模拟

    package org.cc.foo_008; import java.util.ArrayList; import java.util.List; import java.util.Random; ...

  2. yum install 安装 下载好的rpm包 会并依赖包一起安装 zoom电话会议的安装

    [root@ok-T Downloads]# rpm -ivh zoom_x86_64.rpm error: Failed dependencies: libxcb-image.so.()(64bit ...

  3. @ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4 "/" $NF}'中"[ :]+" 是什么意思?@

    http://blog.csdn.net/zhuying_linux/article/details/6822987

  4. Delphi字符串与字符数组之间的转换(初始化的重要性)

    紧接着上篇博客讲解的内容: 将Char型数组转换为string类型还有下面的这种方法 但是我在测试的时候遇到了一些问题,并在下面进行了解释和总结 先说出我的总结 其实我们在学习编程的时候(比如我之前学 ...

  5. CXF学习(2) helloworld

    0.新建一个项目取名wsserver. pom.xml 文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  6. [Spring] 事务级别定义

    记录下来,以后备用 //事务传播属性 @Transactional(propagation=Propagation.REQUIRED)//如果有事务,那么加入事务,没有的话新创建一个 @Transac ...

  7. bbed的使用--查看数据文件信息 & sid信息

    1.得到文件的块大小和数据块个数 在Linux和Unix上,oracle提供了一个小工具dbfsize用于查看文件块大小 (可以参看[ID:360032.1]How to detect and fix ...

  8. 背景虚化 Google Camera App Nokia Refocus HTC One M8 的 Duo景深相机

    背景虚化是单反中一种比较常见的拍照形式,参看 http://www.techbang.com/posts/%2017842 https://refocus.nokia.com/

  9. 在Salesforce中添加Workflow Rule

    在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...

  10. 湖南省第十二届大学生计算机程序设计竞赛 G Parenthesis

    1809: Parenthesis Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q ...