题目大意:给出住所A和工作B两点之间的距离为d,在两者之间有n条河流。不过每条河流都有一艘自动船,把船看着数学上的点,速度为v,河流宽度为L。再给出A到河左边缘距离为p,求从A到B的花费平均时间,即期望。
解题思路:这是一个期望的问题,首先分为两部分:一是在陆地的行走世间,由总距离为d,行走速度为1,则陆地世间花费等于d减去所有河的宽度之和;二是看在河上的花费时间,由于船在0时刻的位置是任意的,因此满足均匀分布,则期望为E1=1/2*(l+r)=1/2L,船向左和向右的概率相等为1/2,则向左的花费为1/2*((L/2)/v),向右为1/2*((L+L/2)/v),最后从左岸到达右岸的共同花费为L/v.综上在河上的花费等于这三部分之和为2*L/v。因此从A到B的期望为2*L/v+d-L(河)。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3232
code:
#include <iostream>
#include <cstdio>
using namespace std;
int n,d,k;
double p,l,v,ans;
int main(){
k=1;
while(scanf("%d%d",&n,&d)!=EOF && (n||d)){
ans=(double)d;
for(int i=0;i<n;i++){
scanf("%lf%lf%lf",&p,&l,&v);
ans-=l; //陆地的时间花费=d-减去所有河的宽度
ans+=2.0*l/v; //河上的时间花费
}
printf("Case %d: %.3lf\n",k++,ans);
printf("\n");
}
return 0;
}