1. 程式人生 > >HDU 3232 && UVA 12230 (簡單期望)

HDU 3232 && UVA 12230 (簡單期望)

house pat field pri put others bmi over describes


Crossing Rivers

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 738 Accepted Submission(s): 387

Problem Description You live in a village but work in another village. You decided to follow the straight path between your house (A) and the working place (B), but there are several rivers you need to cross. Assume B is to the right of A, and all the rivers lie between them.
Fortunately, there is one "automatic" boat moving smoothly in each river. When you arrive the left bank of a river, just wait for the boat, then go with it. You‘re so slim that carrying you does not change the speed of any boat.
Days and days after, you came up with the following question: assume each boat is independently placed at random at time 0, what is the expected
time to reach B from A? Your walking speed is always 1.
To be more precise, for a river of length L, the distance of the boat (which could be regarded as a mathematical point) to the left bank at time 0 is uniformly chosen from interval [0, L], and the boat is equally like to be moving left or right, if it’s not precisely at the river bank.
Input There will be at most 10 test cases. Each case begins with two integers n and D, where n (0 <= n <= 10) is the number of rivers between A and B, D (1 <= D <= 1000) is the distance from A to B. Each of the following n lines describes a river with 3 integers: p, L and v (0 <= p
< D, 0 < L <= D, 1 <= v <= 100). p is the distance from A to the left bank of this river, L is the length of this river, v is the speed of the boat on this river. It is guaranteed that rivers lie between A and B, and they don’t overlap. The last test case is followed by n=D=0, which should not be processed.
Output For each test case, print the case number and the expected time, rounded to 3 digits after the decimal point.
Print a blank line after the output of each test case.
Sample Input
1 1
0 1 2
0 1
0 0
Sample Output
Case 1: 1.000

Case 2: 1.000
Source

field=problem&key=2009+Asia+Wuhan+Regional+Contest+Hosted+by+Wuhan+University&source=1&searchmode=source">2009 Asia Wuhan Regional Contest Hosted by Wuhan University

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?

pid=3232

題目大意:A,B相距D,A,B間有n條河,河寬Li,每條河上有一個速度為vi的船。在河山來回行駛,每條河離A的距離為pi,如今求從A到B時間的期望。步行速度始終為1

題目分析:首先如果所有步行則期望為D,如今每遇到一條河,求過河時間的期望,等待時間的區間為(0,2*L/v)。船在每一個地方都是等可能的。所以等待的期望就是(0 + 2*L/v) / 2 = L / v,又過河還要L / v,所以總的渡河期望值為2 * L / v。所以每遇到一條河拿D減去如果步行過河的期望L再加上實際過河期望2 * L / v就可以,最後發現和p沒有卵關系,真開心~

#include <cstdio>

int main()
{
    int n;
    double D;
    int ca = 1;
    while(scanf("%d %lf", &n, &D) != EOF && (n + D))
    {
        double p, l, v;
        for(int i = 0; i < n; i++)
        {
            scanf("%lf %lf %lf", &p, &l, &v);
            D = D - l + l * 2.0 / v;
        }
        printf("Case %d: %.3f\n\n", ca ++ , D);
    }
}


HDU 3232 &amp;&amp; UVA 12230 (簡單期望)