周赛HHHHHHHH

小 K 成功地破解了密文。但是乘车到 X 国的时候,发现钱包被偷了,于是无奈之下只好作快递员来攒足路费去 Orz 教主……

一个快递公司要将 nn 个包裹分别送到 nn 个地方,并分配给邮递员小 K 一个事先设定好的路线,小 K 需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点。小 K 得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离。若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的。

为了节省燃料,小 K 希望在全部送达的情况下,车的最大速度越小越好,就找到了你给他设计一种方案,并求出车的最大速度最小是多少。

Input

第 1 行为一个正整数 nn,表示需要运送包裹的地点数。

下面 nn 行,第 i+1i+1 行有 3 个正整数 x _ i, y _ i, s _ ixi​,yi​,si​,表示按路线顺序给出第 ii 个地点签收包裹的时间段为 [x _ i, y _ i][xi​,yi​],即最早为距出发时刻 x _ ixi​,最晚为距出发时刻 y _ iyi​,从前一个地点到达第 ii 个地点距离为 s _ isi​,且保证路线中 x _ ixi​ 递增。

可以认为 s _ 1s1​ 为出发的地方到第 11 个地点的距离,且出发时刻为 00。

Output

仅包括一个正数,为车的最大速度最小值,结果保留两位小数。

Sample 1

Inputcopy Outputcopy
3
1 2 2
6 6 2
7 8 4
2.00

Hint

数据范围

  • 对于 20\%20% 的数据,0 < n \le 100
  • 对于 30\%30% 的数据,0
  • 对于 50\%50% 的数据,0
  • 对于 100\%100% 的数据,0

样例解释

第一段用 11 的速度在时间 22 到达第 11 个地点,第二段用 0.50.5 的速度在时间 66 到达第 22 个地点,第三段用 22 的速度在时间 88 到达第 33 个地点。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define dbug cout<<"hear!"< y[i])
		{
			return false;
		}
		else  if(ant < x[i])
		{
			ld xx;
			xx = x[i] - ant;
			ant += xx;
		}
	}
	return true;
}

int main()
{
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		cin >> x[i] >> y[i] >> s[i];
	}
	ld l = 0, r = 100000006;
	ld ans=0;
	while (r-l > 0.0000001)
	{
		ld mid = (l + r )/2;
		if (!check(mid))
		{
			l = mid;
		}
		else
		{
			ans = mid;
			r = mid;
		}
	}
	printf("%.2Lf", ans);
	return 0;
}

 

你可能感兴趣的:(c++)