• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dwtfukgv
博客园    首页    新随笔    联系   管理    订阅  订阅
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\n\n", ++kase, ans);
    }
    return 0;
}

 

posted on 2016-05-28 18:50  dwtfukgv  阅读(227)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3