博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Traffic Management Gym - 101875G
阅读量:4967 次
发布时间:2019-06-12

本文共 954 字,大约阅读时间需要 3 分钟。

题意:

有n辆车,在一条直线上运动,给定位置和速度。如果后车追上前车,则后车不会超车,而已变成前车的速度前进,问最后一次上述车速变化发生在何时。

思路:

假设有一下车辆,数字代表移动速度,具体位置未知,但是相对未知就是数字的摆放顺序,车辆移动方向为右,车辆用速度代称;

        8   4   3   5    2    6  7

由此可知,以2为分界线,2左边的车,速度再快也追不上右边的车,因为已经被2拦住了。

但是3左边的车还是可以追上2-3之间的车(车5)。

实际上不难看出,如果车速是num,而i到n中 车速最小的 就是num[i]的话,那么num[i]左边的都不能追上num[i]右边的了。

所以我们需要从右向左更新最小值,并且更新答案。

 

再考虑

    4  3  2

4一定会追上2,但是有两种方式。

1.先追上3,再以速度3追上2.

  这种情况的时间就是3追上2的时间。

2.3先追上2,然后才被4追上。

  这种情况的时间就是4追上2的时间,可以忽略3。

 

由此可知,只要简单算出左边到最小值的时间就行了。

注意这个最小值对于某一辆车来说,是它右边所有数的最小值呦!

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define fuck(x) cout<<#x<<" = "<
<
=0;i--){ if(a[i].v<=a[m].v){m=i;} else{ans=max(ans,1.0*(a[m].s-a[i].s)/(a[i].v-a[m].v));} } printf("%.6f\n",ans); return 0;}
View Code

 

转载于:https://www.cnblogs.com/ZGQblogs/p/10476986.html

你可能感兴趣的文章
Activity取消默认转场动画;去掉默认转场动画;
查看>>
查看磁盘读写
查看>>
String对象方法属性总结
查看>>
开启otl的64位长整数支持
查看>>
centos6搭建本地openstack软件源
查看>>
android 图片水平反复平铺(repeat x)
查看>>
mysql 数据库备份ubuntu
查看>>
Amazon RDS的通用型存储(SSD)
查看>>
php上传zip、xml文件失败
查看>>
[软件工程--个人作业] 敏捷开发读后感
查看>>
洛谷P3398 仓鼠找sugar [LCA]
查看>>
专为iPhone开发者准备的50款经典开源应用
查看>>
mysql不支持在子查询中使用limit解决办法
查看>>
兼容性问题
查看>>
【洛谷3467/BZOJ1113】[POI2008]海报PLA-Postering(单调栈)
查看>>
致青春---关于工作生活的一点感想
查看>>
linux常用命令
查看>>
WPF跨程序集共享样式(跨程序集隔离样式和代码)
查看>>
WPF一步步实现完全无边框自定义Window(附源码)
查看>>
图像滤镜艺术---PS图层混合模式之明度模式
查看>>