UVa 12230 - Crossing Rivers(数学期望)

链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3382

题意:

你住在村庄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之间,并且相互不会重叠。

分析:

用数学期望的线性。过每条河的时间为L/v到3L/v的均匀分布,因此期望过河时间为2L/v。
把所有2L/v加起来,再加上D-sum(L)即可。

代码:

 1 #include <cstdio>
 2
 3 int main() {
 4     int n, D, p, L, v;
 5     for(int cases = 1; scanf("%d%d", &n, &D) && D; cases++) {
 6         double ans = D;
 7         for(int i = 0; i < n; i++) {
 8             scanf("%d%d%d", &p, &L, &v);
 9             ans -= L;
10             ans += 2.0 * L / v;
11         }
12         printf("Case %d: %.3f\n\n", cases, ans);
13     }
14     return 0;
15 }

原文地址:https://www.cnblogs.com/hkxy125/p/9557720.html

时间: 2024-12-16 13:14:12

UVa 12230 - Crossing Rivers(数学期望)的相关文章

Uva - 12230 Crossing Rivers (数学期望)

你住在村庄A,每天需要过很多条河到另一个村庄B上班,B在A的右边,所有的河都在A,B之间,幸运的是每条船上都有自由移动的自动船, 因此只要到达河左岸然后等船过来,在右岸下船,上船之后船的速度不变.现在问从A到B的期望时间是多少,假设在出发时船的位置都是 随机分布.人在 陆地上行走的速度为1. 根据数学期望的线性,过每条河的时间为L/v(到河边船刚好开)到3L/v(到河边船刚好开走)的均匀分布,因此期望过河时间为 (L+3L/v)/2=(2*L/v) 加上 D-sum(L) . 1 #includ

UVA - 12230 Crossing Rivers (期望)

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

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

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(概率)

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 =

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

题意:你要从A到B去上班,然而这中间有n条河,距离为d.给定这n条河离A的距离p,长度L,和船的移动速度v,求从A到B的时间的数学期望. 并且假设出门前每条船的位置是随机的,如果不是在端点,方向也是不定的,你在陆地行走速度为1,输入保证河在AB之前,并且不会重叠. 析:一看这个题,好像不会啊...这怎么求,这么乱,这么复杂... 但是仔细一想求时间期望,不就是在过河的地方时间不是固定的么,只要求出过河的时间的数学期望,利用数学期望的线性,加起来就OK了. 这样一想感觉就不乱了,那么怎么求每个河的

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

uva 12230 Crossing Rivers

https://vjudge.net/problem/UVA-12230 题意: 在一条笔直的线上,有A和B,两者之间距离为D,之间有n条河,要从A到达B 每条河上都有匀速移动的自动船,因此每当到达一条河的左岸时,只需等船过来,载着你过河,然后在右岸下船. 假设在出门时所有船的位置都是均匀随机分布.如果位置不是在河的端点处,则朝向也是均匀随机.在陆地上行走的速度为1. 告诉你每条河的左端点坐标离A的距离p,长度L和移动速度v(0≤p<D,0<L≤D,1≤v≤100),输出A到B时间的数学期望

UVA.12230.Crossing Rivers(期望)

题目链接 /* 到达一条河时,船在河中的位置是随机的,所以船到达岸边需要的时间在 0~2l/v 均匀分布,所以船到岸的期望为 (0+2l/v)/2 过河需要 l/v 的时间,所以过一条河总的期望为 (0+2l/v)/2 + l/v = 2l/v 陆地上的速度是确定的,可以直接先计算出来 期望是线性的,每条河期望相加即为过河的总期望 */ #include<cstdio> using namespace std; int main() { int n,d,p,l,v,cas=0; while(~