BIT2014級軟件學院程序設計-08傳送帶

Description

小明的飛機快要趕不上了!

幸好大廳的路上有一些傳送帶。每個傳送帶都有一定的速度,傳送帶之間沒有重疊。

小明自己行走的速度爲w,如果傳送帶的速度爲v的話,在傳送帶上走的速度就是w+v。

但是小明還是很着急,所以他決定跑一段時間t。他跑的速度是r,那麼如果傳送帶的速度爲v的話,在傳送帶上跑的速度就是r+v。

對於時間t,他不一定要連續跑,可以走走再跑。也不一定非要跑夠t。

問小明至少需要多少時間才能到達終點。

Input

輸入第一行爲用例數T,1<=T<=40。

每一組用例的第一行包含五個整數:

X:爲大廳的長度,小明起始位於0,終點是X,1<=X<=1000000

W:爲走路的速度

R:爲跑步的速度,1<=W<R<=100

t:最多能跑t秒,1<=t<=1000000

n:傳送帶的個數

接下來的n行,表示n個傳送帶的詳細信息。每行包含三個整數:Bi,Ei,Vi,分別表示傳送帶的起始位置、終止位置和速度,0<=Bi<Ei<=X,1<=vi<=100。任意兩個傳送帶都不相交。

Output

每組用例輸出包含一個數字,表示至少需要多少時間。輸出四捨五入到6位小數。

Sample Input

3

10 1 4 2 2

0 1 1

9 10 1

10 1 4 1000 2

0 1 1

9 10 6

20 1 3 20 5

0 4 5

4 8 4

8 12 3

12 16 2

16 20 1

Sample Output

3.000000

2.300000

3.538095

貪心。分清楚是在傳送帶的時候跑還是平底的時候跑。

// debug.cpp : 定義控制檯應用程序的入口點。
//


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 1005
typedef struct {
	double st, ed, v;
}NODE;
NODE chuan[maxn];
int check_0(double k)
{
	if (k > -0.0000001&&k < 0.0000001)
		return 1;
	return 0;
}
double r, t_rest, w;
double check(double far, double v)
{
	double t_fuck;
	if (check_0(t_rest))//沒有剩餘跑的時間
	{
		return (far / (v + w));
	}
	if ((v + r)*t_rest<far)//不能全用跑的
	{
		t_fuck = t_rest;
		t_rest = 0.0000;
		return (t_fuck + (far - t_fuck*(r + v)) / (v + w));
	}
	t_rest = t_rest - far / (r + v);//全跑
	return far / (r + v);

}
int cmp(const void*a, const void*b)
{
	return (*(NODE *)a).v - (*(NODE *)b).v;
}
int main(void)
{
	double sum_chuan;
	int T, n, i;
	double far, v, x, t, walk;
	double t_cha, ans;
	scanf("%d", &T);
	while (T--)
	{
		sum_chuan = 0.0;
		scanf("%lf%lf%lf%lf%d", &x, &w, &r, &t, &n);
		for (i = 0;i < n;i++)
		{
			scanf("%lf%lf%lf", &chuan[i].st, &chuan[i].ed, &chuan[i].v);
			sum_chuan += (chuan[i].ed - chuan[i].st);
		}
		qsort(chuan, n, sizeof(chuan[i]), cmp);
		walk = x - sum_chuan;
		far = walk;v = 0;t_rest = t;
		ans = check(far, v);
		for (i = 0;i < n;i++)
		{
			far = chuan[i].ed - chuan[i].st;

			v = chuan[i].v;
			ans += check(far, v);
		}
		printf("%.6lf\n", ans);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章