Crossing Rivers
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 756 Accepted Submission(s): 397
Fortunately, there is one "automatic" boat moving smoothly in each river. When you arrive the left bank of a river, just wait for the boat, then go with it. You're so slim that carrying you does not change the speed of any boat.
Days and days after, you came up with the following question: assume each boat is independently placed at random at time 0, what is the expected time to reach B from A? Your walking speed is always 1.
To be more precise, for a river of length L, the distance of the boat (which could be regarded as a mathematical point) to the left bank at time 0 is uniformly chosenfrom interval [0, L], and the boat is equally like to be moving left or right, if it’s not precisely at the river bank.
Print a blank line after the output of each test case.
题意:A、B两点之间距离为D,并且在A、B之间有n条河,每条河上有一条自动船。船的宽度为L,
把船看成一个点时,已知步行的速度为1,船的速度为v,每条河与A点的距离为P,求A到B花
费的时间的期望是多少。
题解:假设船在刚好在河岸,河的宽度为L,船的速度为v,则有两种情况,一种是人刚好能坐上船,等
的时间为0;一种是刚好坐不上,等的时间是2*L/v,船在任意位置都存在这两种情况,所以等船
时间的期望是T=(0+2*L/v)/2,所以过河时间的期望为T+L/v=2*L/v;
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<iostream>
using namespace std;
const int N=55;
int n, d;
int main() {
// freopen("test.in","r",stdin);
int ca=1;
while(~scanf("%d%d",&n,&d)) {
if(n==0&&d==0)break;
double s=0;
double ans=0;
double dd=(double)d;
for(int i=0; i<n; i++) {
double p,l,v;
scanf("%lf%lf%lf",&p,&l,&v);
s+=l;
ans+=2*l/v;
}
ans+=(dd-s);
printf("Case %d: %.3f\n\n",ca++,ans);
}
return 0;
}