首页 > 其他 > 详细

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

时间:2017-03-06 15:03:14      阅读:309      评论:0      收藏:0      [点我收藏+]

题目链接: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

 

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

原文:http://www.cnblogs.com/bin-gege/p/6509475.html

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