某国有 N个军事基地,每一个军事基地的位置可以由二维坐标平面上的一个点 (x,y)表示。现在,这个国家的元首希望建立一个军事通讯基站。由于某些原因,这个军事通讯基站只能建立在 x轴上的某个位置。现在,元首想要知道,新建立的基站到这 N个军事基地的最大距离的最小值是多少。
输入描述
输入第一行输入一个整数 N [1,100 000],表示军事基地的数量。
接下来 N 行,每行包含两个以空格分隔的整数 x,y [-10 000,10 000],表示每一个军事基地的位置坐标。
输出描述
输出一个保留到小数点后4位的小数表示答案。
样例说明
对于给出的样例,通讯基站建立在 (0,0)处时其到三个军事基地的距离最大值为2 。可以证明 2为可能的最小值。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double measure(double x,float p[][2],int n)
{
int i;
double d=0,maxd=0;
for(i=0;i<n;i++)
{
d=sqrt(pow(p[i][0]-x,2)+pow(p[i][1],2));
if(d>maxd) maxd=d;
}
return maxd;
}
int main(){
int n,i;
scanf("%d",&n);
float p[n][2];
for(i=0;i<n;i++) scanf("%f %f",&p[i][0],&p[i][1]);
double mind=0,x;
double right=-10000,left=10000,midl,midr;
while(left-right>1e-6)
{
midl=(right+left)/2;
midr=(right+midl)/2;
if(measure(midl,p,n)<measure(midr,p,n)) right=midr;
else left=midl;
}
//printf("%.4f\n",left);
printf("%.4f\n",measure(left,p,n));
}