UVa 12230 && HDU 3232 Crossing Rivers (数学期望水题)

题意:你要从A到B去上班,然而这中间有n条河,距离为d。给定这n条河离A的距离p,长度L,和船的移动速度v,求从A到B的时间的数学期望。

并且假设出门前每条船的位置是随机的,如果不是在端点,方向也是不定的,你在陆地行走速度为1,输入保证河在AB之前,并且不会重叠。

析:一看这个题,好像不会啊。。。这怎么求,这么乱,这么复杂。。。

但是仔细一想求时间期望,不就是在过河的地方时间不是固定的么,只要求出过河的时间的数学期望,利用数学期望的线性,加起来就OK了。

这样一想感觉就不乱了,那么怎么求每个河的时间呢,题目说了都是船都是随机的,可以认为是等概率的,那么过河的最短时间就是L/v,正好到河边船正好过来,

最长时间就是3*L/v,也就是他刚到河边,船刚走,最后再加上在陆地的时间就OK了。

代码如下:

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdio>

using namespace std;

int main(){
    int n, d, kase = 0;
    while(scanf("%d %d", &n, &d)){
        if(!d && !n)  break;
        double ans = (double)d;
        for(int i = 0; i < n; ++i){
            double p, l, v;
            scanf("%lf %lf %lf", &p, &l, &v);
            ans = ans - l + 2 * l / v;//由于在陆地的速度是1,所以不用除了
        }

        printf("Case %d: %.3lf

", ++kase, ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/dwtfukgv/p/5538103.html