HDOJ 3232 Crossing Rivers 简单概率

简单期望:

船到岸边时间的期望是 L/v 再过河的时间是L/v

所以过每条河的时间期望是2*L/v

Crossing Rivers

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

Total Submission(s): 699    Accepted Submission(s): 361

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 chosenfrom 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

2009 Asia Wuhan Regional Contest Hosted by
Wuhan University

/* ***********************************************
Author        :CKboss
Created Time  :2015年01月29日 星期四 16时39分29秒
File Name     :UVA12230.cpp
************************************************ */

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>

using namespace std;

int n,d;
struct River
{
	int p,l,v;
}ri[20];

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
	int cas=1;
	while(scanf("%d%d",&n,&d)!=EOF)
	{
		if(n==0&&d==0) break;
		double ans1=0.0;
		double sum=0.0;
		for(int i=0;i<n;i++)
		{
			int a,b,c;
			scanf("%d%d%d",&a,&b,&c);
			ri[i]=(River){a,b,c};
			ans1+=2.*b/c;
			sum+=b;
		}
		ans1+=(d-sum);
		printf("Case %d: %.3lf\n",cas++,ans1);
		putchar(10);
	}

    return 0;
}
时间: 2024-12-20 10:29:54

HDOJ 3232 Crossing Rivers 简单概率的相关文章

UVA 12230 - Crossing Rivers(概率)

UVA 12230 - Crossing Rivers 题目链接 题意:给定几条河,每条河上有来回开的船,某一天出门,船位置随机,现在要求从A到B,所需要的期望时间 思路:每条河的期望,最坏就是船刚开走3L/V,最好就是直接上船L/V,期望为4L/V/2 = 2L/V,然后在算上陆地上的时间,就是答案 代码: #include <stdio.h> #include <string.h> int n; double d, p, l, v; int main() { int cas =

HDU3232 Crossing Rivers 数学期望问题

Crossing Rivers                                                                                      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description You live in a village but work in another vil

POJ 3071 Football(简单 概率DP)

Football 原文链接:http://blog.csdn.net/xuechelingxiao/article/details/38520105 大意:2^n 个球队进行单场淘汰赛,每两只球队之间比赛会有胜负的概率,问最后谁夺冠的概率最大. 思路:简单的概率DP问题,主要是怎么处理哪两个球队比赛的问题. DP方程为 dp[i][j] = ∑(dp[i-1][j]*dp[i-1][k]*p[j][k]); //dp[i][j]表示第 i 轮的时候,第 j 支队伍赢的概率.. 对于其中位运算,可

Aeroplane chess(简单概率dp)

Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal probability to face up and the numbers on the faces are 1,2,3,4,5,6). Whe

uva 1636 - Headshot(简单概率问题)

直接扣一枪没有子弹 是条件概率 转一下再扣一枪 是简单事件发生的概率 前者用00的个数除以00和01子串的总数 后者用0的个数除以所有数字的个数 然后换算一下运算方式比较即可 #include<cstdio> #include<cstring> const int maxn = 105; char s[105]; int cnt0,cnt1,cnt2,cnt3; int main() { while(scanf("%s",s+1)!=EOF) { cnt0=0;

简单概率DP——hdu4405

题目描述: Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal probability to face up and the numbers on the faces are 1,2,3,4,5,6

uva 12230 - Crossing Rivers(求数学期望)

利用了数学期望的线性性质:有线个随机变量之和的数学期望的关于每个随机变量的期望之和: 由于过每条河的时间为L / V和3L / V的均匀分布,因此期望过河时间为2L / V. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n;double d; int main() { int kase=0; while(scanf("%d%lf",&a

『UVA 12230』Crossing Rivers (简单期望)

题目链接戳这里 题目描述 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 river

UVA - 12230 Crossing Rivers 概率期望

You live in a village but work in another village. You decided to follow the straight path between yourhouse (A) and the working place (B), but there are several rivers you need to cross. Assume B is tothe right of A, and all the rivers lie between t