[HDU 6581] Vacation

题目大意:

有n+1辆车,你是排在最后的一辆,每辆车有三个参数si,vi,li,分别表示距离终点的距离,最高速度,以及车长,由于车道很窄,所以不能超车,也就是当你追上前面的车时,速度就得跟他一样,现在让我们求我们通过终点的时间。

题目链接:

HDU 6581

题目分析:

实数二分时间,首先默认可以超车,算出每个车的位置,然后倒着算出每个车的实际位置,看是否能过终点,把精度放到10^-8就能过了

代码:

#include 
#include 
#include 
#include 
#include 
const int maxm=1e5+100;
const double eps=1e-8;
struct node{
	double l,s,v;
}a[maxm];
int n;
double dis[maxm];
double vmin=1e9+100;
void work()
{
	vmin=1e9+100;
	for(int i=1;i<=n+1;i++) scanf("%lf",&a[i].l);
	for(int i=1;i<=n+1;i++) scanf("%lf",&a[i].s);
	for(int i=1;i<=n+1;i++) scanf("%lf",&a[i].v),vmin=std::min(vmin,a[i].v);
	if(n==0) printf("%.10lf\n",a[1].s/a[1].v);
	if(n==0) return;
	double l=0,r=a[1].s/vmin;
	while(r-l>eps)
	{
		double mid=(l+r)/2.0;
		for(int i=n+1;i>=1;i--) dis[i]=a[i].s-a[i].v*mid;
		for(int i=n;i>=1;i--) if(dis[i]

你可能感兴趣的:(题目分析,二分)