zoukankan      html  css  js  c++  java
  • CF782B The Meeting Place Cannot Be Changed

    题意:

    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 #include <iostream>
     3 #include <algorithm>
     4 #include <iomanip>
     5 using namespace std;
     6 struct node
     7 {
     8     double pos;
     9     double speed;
    10 };
    11 node a[60005];
    12 int n;
    13 double minn, maxn;
    14 bool check(double t)
    15 {
    16     minn = a[0].pos - t * a[0].speed;
    17     maxn = a[0].pos + t * a[0].speed;
    18     for (int i = 1; i < n; i++)
    19     {
    20         double tmp_l = a[i].pos - t * a[i].speed;
    21         double tmp_r = a[i].pos + t * a[i].speed;
    22         minn = max(minn, tmp_l);
    23         maxn = min(maxn, tmp_r);
    24     }
    25     return maxn - minn >= 1e-7;
    26 }
    27 
    28 double solve()
    29 {
    30     double l = 0.0, r = 1000000005, res = 1000000005;
    31     for (int i = 0; i < 10000; i++)
    32     {
    33         double mid = (l + r) / 2.0;
    34         if (check(mid))
    35         {
    36             r = mid;
    37             res = mid;
    38         }
    39         else
    40         {
    41             l = mid;
    42         }
    43     }
    44     return res;
    45 }
    46 
    47 int main()
    48 {
    49     cin >> n;
    50     for (int i = 0; i < n; i++)
    51     {
    52         cin >> a[i].pos;
    53     }
    54     for (int i = 0; i < n; i++)
    55     {
    56         cin >> a[i].speed;
    57     }
    58     cout << setprecision(7) << solve() << endl;
    59     return 0;
    60 }
  • 相关阅读:
    Traefik使用
    kubernetes nfs-client-provisioner外部存储控制器
    基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡
    k8s-rabbitmq-(一)集群部署
    TabSet 实现拖动后并保存配置
    C# MD5加密
    VSS “vc6.0vssum.dat may be corrupt”错误
    C#编程基础笔记
    android.view.WindowLeaked的解决办法
    【转】java线程系列---Runnable和Thread的区别
  • 原文地址:https://www.cnblogs.com/wangyiming/p/6516537.html
Copyright © 2011-2022 走看看