【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;
}

猜你喜欢

转载自www.cnblogs.com/rlddd/p/9477818.html
今日推荐