logn_sort 2023-01-30 20:47 采纳率: 50%
浏览 138
已结题

关于#开会#的问题,如何解决?(语言-c++)

题目描述:

在x轴上有n个人,每个人有一个移动速度 vi, 现在需要找一个地方让大家聚到一起开会,问你最少需要多少时间才可以让所有人都到达同一个点

输入格式:
第一行输入一个整数n
第二行输入n个整数

xi 表示每个人初始的位置

第三行输入n个整数

vi 表示每个人的移动速度

输出格式:
输出一个浮点数,保留五位小数,四舍五入。比如答案为2.333336,就输出2.33334

样例输入1:
3
7 1 3
1 2 1
样例输出1:
2.00000

样例输入2:
10
2 3 5 7 11 13 17 19 23 29
6 5 4 3 2 1 2 3 4 5
样例输出2:
2.75000

大家可以给个思路么?

  • 写回答

6条回答 默认 最新

  • hurp13 2023-01-31 09:41
    关注

    这道题目是求所有人都到达同一个点的最短时间。

    思路:

    1.先求出初始位置的最大值和最小值。
    2.再求出所有人移动速度的最大值。
    3.最后用 (最大位置 - 最小位置) ÷ 最大移动速度 即为所有人到达同一点的最短时间。

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int N=1e5+10;
    int n,p[N],v[N];
    double dfs(double x)
    {
        double l=1e9,r=-1e9;
        for(int i=0;i<n;i++)
        {
            l=min(l,p[i]+v[i]*x);
            r=max(r,p[i]+v[i]*x);
        }
        return (r-l)/2.0;
    }
    int main()
    {
        cin>>n;
        for(int i=0;i<n;i++) cin>>p[i];
        for(int i=0;i<n;i++) cin>>v[i];
        double l=0,r=1e9;
        while(r-l>1e-5)
        {
            double mid=(l+r)/2.0;
            if(dfs(mid)<=0) r=mid;
            else l=mid;
        }
        printf("%.5f",r);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月2日
  • 已采纳回答 2月2日
  • 创建了问题 1月30日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)