• Codeforces 782B


    time limit per test
    5 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    The main road in Bytecity is a straight line from south to north. Conveniently, there are coordinates measured in meters from the southernmost building in north direction.

    At some points on the road there are n friends, and i-th of them is standing at the point xi meters and can move with any speed no greater than vi meters per second in any of the two directions along the road: south or north.

    You are to compute the minimum time needed to gather all the n friends at some point on the road. Note that the point they meet at doesn't need to have integer coordinate.

    Input

    The first line contains single integer n (2 ≤ n ≤ 60 000) — the number of friends.

    The second line contains n integers x1, x2, ..., xn (1 ≤ xi ≤ 109) — the current coordinates of the friends, in meters.

    The third line contains n integers v1, v2, ..., vn (1 ≤ vi ≤ 109) — the maximum speeds of the friends, in meters per second.

    Output

    Print the minimum time (in seconds) needed for all the n friends to meet at some point on the road.

    Your answer will be considered correct, if its absolute or relative error isn't greater than 10 - 6. Formally, let your answer be a, while jury's answer be b. Your answer will be considered correct if  holds.

    Examples
    input
    3
    7 1 3
    1 2 1
    
    output
    2.000000000000
    
    input
    4
    5 10 3 2
    2 3 2 4
    
    output
    1.400000000000
     1 #include<cstdio>
     2 struct type{
     3     int x;
     4     int v;
     5 }p[60000+5];
     6 int n;
     7 bool check(double time)
     8 {
     9     //遍历每个人在time个单位时间后能走到的位置,不断更新重叠的区间[l,r],只要到最后这个区间一人不为空,就return true 
    10     double l=p[1].x-time*p[1].v;
    11     double r=p[1].x+time*p[1].v;
    12     for(int i=2;i<=n;i++){
    13         if(p[i].x-time*p[i].v > l) l=p[i].x-time*p[i].v;
    14         if(p[i].x+time*p[i].v < r) r=p[i].x+time*p[i].v;
    15         if(l>r) return false;
    16     }
    17     return true;
    18 }
    19 int main()
    20 {
    21     scanf("%d",&n);
    22     for(int i=1;i<=n;i++) scanf("%d",&p[i].x);
    23     for(int i=1;i<=n;i++) scanf("%d",&p[i].v);
    24     double st=0,ed=1000000000;
    25     while(ed-st>1e-7){
    26         double mid=st+(ed-st)/2;
    27         if(check(mid)) ed=mid;
    28         else st=mid;
    29     }
    30     printf("%.12lf
    ",ed);
    31 }
  • 相关阅读:
    EasyUi TreeGrid封装
    Ionic项目中使用极光推送
    Win7搭建NodeJs开发环境
    NET 平台下的插件化开发内核
    访问数据库时如何解决并发问题
    async & await 的前世今生
    Linux环境编程相关的文章
    C# 5.0 Async函数的提示和技巧
    python算法题
    如何从数组中随机取出多个不重复的项
  • 原文地址:https://www.cnblogs.com/dilthey/p/6804169.html
Copyright © 2020-2023  润新知