2020牛客竞赛

链接:https://ac.nowcoder.com/acm/contest/3006/B
来源:牛客网

可以知道,在数轴上选点,会形成一个下凸形(左边单调递减,右边单调递增)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 struct p{
 5     int x,y;
 6 }a[100005];
 7 int n;
 8 double check(double x)
 9 {
10     double max=0;
11     for (int i=1;i<=n;i++){
12         double tmp=sqrt(a[i].y*a[i].y+(a[i].x-x)*(a[i].x-x));
13         if (tmp>max) max=tmp;
14     }
15     return max;
16 }
17 double tsearch(double left,double right){
18     int i;
19     double mid,midmid;
20     for(i=0;i<100;i++){
21         mid=(left+right)/2;
22         midmid=(mid+right)/2;
23         if(check(mid)>check(midmid)) //极大值求法
24             left=mid;
25         else
26             right=midmid;
27     }
28     return mid;
29 }
30 int main()
31 {
32     scanf("%d",&n);
33     for (int i=1;i<=n;i++)
34         scanf("%d%d",&a[i].x,&a[i].y);
35     double max=tsearch(-10000,10000);
36     printf("%.4lf\n",check(max));
37     return 0;
38 }

 

posted @ 2020-02-13 19:29  古比  阅读(477)  评论(0)    收藏  举报