【UVa12230】Crossing Rivers
题目描述
有个人每天要去公司上班,每次会经过N条河,家和公司的距离为D,默认在陆地的速度为1,给出N条河的信息,包括起始坐标p,宽度L,以及船的速度。船会往返在河的两岸,人到达河岸是,船的位置是随机的(包括方向)。问说人达到公司所需要的期望时间。
输入
有多组数据。每组数据第一行有两个数N,D,接下来N行每行包含三个数p,L,v。
输出
对于每组数据,输出期望时间,保留三位小数。
样例输入
1 1
0 1 2
0 1
0 0
样例输出
Case 1: 1.000
Case 2: 1.000
题解
对于每条河,船的情况是随机的,等待的时间在区间 [ 0 , 2 * L / v ] 中,那么期望等待时间为 L / v 。由于过河的时间是 L / v , 那么期望过河时间为 2 * L / v 。
步行的期望时间为 总路程D - 所有河的总长度 。
答案为步行的期望时间 + 过河期望总时间 。
#include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define ll long long int tmp,n; double d,l,p,v; int main(){ while(scanf("%d%lf",&n,&d)==2&&(n||d)){ for(int i=1;i<=n;i++){ cin>>p>>l>>v; d-=l; d+=2*l/v; } printf("Case %d: %.3lf\n\n",++tmp,d); } return 0; }