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

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

时间复杂度$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. 网页(HTML)中的特殊字符

    网页(HTML)中的特殊字符 (1)一般来说,在HTML中,一个特殊字符有两种表达方式,一种称作数字参考,一种称作实体参考. 所谓数字参考,就是用数字来表示文档中的特殊字符,通常由前缀“&#” ...

  2. Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger

    Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...

  3. 查看进程,按内存从大到小 ,查看进程,按CPU利用率从大到小排序

    查看进程,按内存从大到小 ps -e -o "%C : %p : %z : %a"|sort -k5 -nr 查看进程,按CPU利用率从大到小排序 ps -e -o "% ...

  4. (1)Underscore.js入门

    1. Underscore对象封装 Underscore并没有在原生的JavaScript对象原型中进行扩展,而是像jQuery一样,将数据封装在一个自定义对象中(下文中称"Undersco ...

  5. ASP.NET Web API 数据验证

    第一种方式单独为每一个Action做验证 // POST api/values public HttpResponseMessage Post([FromBody]UserInfo userInfo) ...

  6. Oracle 10g Block Change Tracking特性

    Using Block Change Tracking to Improve Incremental Backup Performance 使用块改变跟踪改善增量备份的性能 The block cha ...

  7. 继续Get News List

    拿到news list 所需要的技能 json数组反序列化 iOS中有哪些集合对象 数组的遍历 Debugging with GDB json数组反序列化 id jsonObject = [NSJSO ...

  8. 1-01Sql Sever 2008的安装

    Sql Sever 2008对计算机的配置要求: 1:处理器:最低1.4Ghz的处理器,建议使用2.0GHz或更高的处理器  . 2:内存:最小512MB, 建议使用1GB或更高的处理器. 3:磁盘容 ...

  9. wp8 入门到精通 高仿微信发信息 键盘不消失

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> < ...

  10. AIX下禁止crs随ha启动而启动

    /etc/init.crs enable /etc/init.crs disable 查看目前crs是enable还是disable状态 状态记录在一个文本文件里  /etc/oracle/scls_ ...