Codeforces Round #403 div2 B. The Meeting Place Cannot Be Changed(二分)

题目链接:Codeforces Round #403 div2 B. The Meeting Place Cannot Be Changed

题意:

一条直线有n个点,每个点有一个速度,然后将全部的点聚在一起,问最少的时间

题解:

二分答案,然后O(n)check一下能否聚到一起。

check:维护一个左右区间,然后对于每个点能到达的左右最大范围,不停的缩小这个区间就行。

 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;++i)
 3 using namespace std;
 4 typedef pair<int,int>P;
 5 const int N=60007;
 6 int n;
 7 P a[N];
 8 int check(double mid)
 9 {
10     double r=a[1].first+a[1].second*mid;
11     double l=a[1].first;
12     F(i,2,n)
13     {
14         double tmpr=a[i].first+a[i].second*mid;
15         double tmpl=a[i].first-a[i].second*mid;
16         if(tmpl>r)return 0;
17         if(tmpl>l)l=tmpl;
18         if(r>tmpr)r=tmpr;
19     }
20     return 1;
21 }
22 
23 int main()
24 {
25     scanf("%d",&n);
26     F(i,1,n)scanf("%d",&a[i].first);
27     F(i,1,n)scanf("%d",&a[i].second);
28     sort(a+1,a+1+n);
29     double l=0,r=1e9,mid,ans;
30     F(i,1,200)
31     {
32         mid=(l+r)/2;
33         if(check(mid))ans=mid,r=mid;
34         else l=mid;
35     }
36     printf("%.7f\n",ans);
37     return 0;
38 }
View Code

 

posted @ 2017-03-06 13:04  bin_gege  阅读(129)  评论(0)    收藏  举报