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

 

转载于:https://www.cnblogs.com/bin-gege/p/6509475.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值