首页 > 其他 > 详细

Gym - 102470A Trick or Treat 三分

时间:2020-08-22 20:04:13      阅读:63      评论:0      收藏:0      [点我收藏+]

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));
    }
}

Gym - 102470A Trick or Treat 三分

原文:https://www.cnblogs.com/hznumqf/p/13546704.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!