题意:Charley骑车去上学,4500m的长度,从0时刻开始骑,一旦遇到速度比自己快的人,他就立刻跟着速度比自己快的人走,这段加速的时间视为0。问他到学校最短需要多长时间。
分析:1.对于开始的时间为负的人,没必要考虑,如果能追上,说明速度比他快;如果追不上,更不用考虑了。
会用到一个函数:
转自网上的神分析:
注意以下几种情况:
1.Charley出发后,一定是跟随着比较快的,但不一定是最快的。因为速度快,而且比Charley出发早,有可能Charley根本没有机会遇到他(如图中的a)。
2.比Charley晚出发,但速度比较慢的。这种情况可以不用考虑。如图e,如果Charley可以追上的话,那么说明Charley当时的速度一定比e快,那么Charley就不会跟着e。
3.当Charley出发一段时间后,有速度更快的人也出发,并且在某个时刻追上了Charley,那么Charley就会放弃速度慢的,而跟随速度快的。
综上所述,比Charley出发早的人,可以不用考虑。
在图上可以看到,用彩色笔描出的折线段,就是Charley的行车线路。
花费的时间为 t0 + t1 + t2 = tb
从图中可以知道,只要找到比Charley晚出发或同时出发的人当中最早到的同学的时间(出发时刻加上骑车时间)就是Charley所花的时间了。
贴一下代码:(240k,47ms)
#include<cmath>
using namespace std;
int main()
{
}