Gym - 102470A Trick or Treat 三分
Gym - 102470A Trick or Treat 三分
题意
给定二维平面上\(n\) 个点,要求在\(x\) 轴上找一个点使得这\(n\) 个点中最大距离最小
坐标以浮点形式给出
\[1 \leq n \leq 50000 , -200000\leq x ,y\leq 200000
\]
分析
根据题意应该是类似几何性质的题,又由于是在\(x\) 轴上寻找一个点就可,且范围有限,猜想一下三分答案
注意这里\(L,R\) 开大一点
代码
pii p[50005];
int n;
double get_dis(pii a, pii b) {
return sqrt((a.fi - b.fi) * (a.fi - b.fi) + (a.se - b.se) * (a.se - b.se));
}
double get_sum(double x) {
double res = 0;
for (int i = 0; i < n; i++) {
res = max(res, get_dis(p[i], make_pair(x, 0)));
}
return res;
}
double three() {
double l = -400000, r = 400000;
for (int i = 0; i < 100; i++) {
double mid = (l + r) / 2;
double mmid = (mid + r) / 2;
if (get_sum(mid) < get_sum(mmid)) r = mmid;
else l = mid;
}
return l;
}
int main() {
double x, y;
while (n = readint()) {
if (!n) break;
for (int i = 0; i < n; i++) {
scanf("%lf%lf", &p[i].fi, &p[i].se);
}
double res = three();
if (equals(res, 0)) res = 0;
printf("%.9f %.9f\n", res, get_sum(res));
}
}