zoukankan      html  css  js  c++  java
  • UVa 12230 Crossing Rivers (数学期望)

    题目

    题目大意

    你住在村庄(A), 每天需要过很多条河到另一个村庄(B)上班。(B)(A)的右边, 所有的河都在中间。幸运的是, 每条和上都有匀速移动的自动船, 因此每当到达一条河的左岸时, 只需等船过来, 载着你过河, 然后在右岸下船。你很瘦, 因此上船之后船速不变。

    日复一日, 年复一年, 你问自己: 从(A)(B), 平均情况下需要多长时间? 假设在出门时所有船的位置都是均匀随机分布。如果位置不是在河的端点处, 则朝向也是均匀随机。
    在陆地上行走的速度为(1)

    输入(A)(B)之间河的个数(n)、长度(D)((0 ≤ n ≤ 10), (1 ≤ D ≤ 1000)), 以及每条河的左端点坐标离(A)的距离(p), 长度(L)和移动速度(v)((0 ≤ p < D), (0 < L ≤ D), (1 ≤ v ≤ 100)), 输出(A)(B)时间的数学期望。输入保证每条河都在(A)(B)之间, 并且相互不会重叠。

    题解

    过一条河最坏情况时间为(frac{3L}{v}), 即到的时候船刚刚走;

    最好情况时间为(frac{L}{v}), 即到的时候船刚刚来。

    因为船的位置是均匀随机分布, 因此期望过河时间为(frac{2L}{v})

    把所有(frac{2L}{v})加起来, 再加上(D - Sigma L_i)即可。

    代码

    #include <cstdio>
    int n, D, cases;
    double ans, sum, L, v;
    int main(int argc, char const *argv[]) {
      while (~scanf("%d %d", &n, &D) && (n || D)) {
        ans = sum = 0.0;
        for (register int i(0); i < n; ++i) {
          scanf("%lf %lf %lf", &L, &L, &v);
          ans += 2.0 * L / v,
          sum += L;
        }
        ans += double(D) - sum;
        printf("Case %d: %.3lf
    
    ", ++cases, ans);
      }
      return 0;
    }
    
  • 相关阅读:
    Eclipse中自动提示的方法参数都是arg0,arg1的解决方法
    eclipse 下找不到或无法加载主类的解决办法
    将博客搬至CSDN
    java接口中定义成员变量
    重写与重载
    多位数每一位个系数:个位num%10;十位num/10%10.......
    输出 n=6 的三角数字阵(JAVA基础回顾)
    二维数组的遍历之查漏补缺
    For循环打印正三角,倒三角,菱形
    JAVA的continue用法
  • 原文地址:https://www.cnblogs.com/forth/p/9722196.html
Copyright © 2011-2022 走看看