题意:你在点A,目的地是点B,A和B的距离为D。中间隔了好多条河(所有河不会重叠),每条河有3个参数(P,L,V),其中P表示距离A点的长度,L表示河的长度,V表示河里的船的速度。假设每条河中仅有1条自动船,以速度V左右匀速运动,碰到河的端点就反向走。那么从A点到B点的期望是多沙?
注意:A点到B点都是在x轴上,而任意河只是[A,B]中的一个子区间而已,只是所有子区间都不会重叠。
思路:刚开始以为会有河可能是重叠的,想了N久。
由于船的任意时刻的位置都是随机的,那就是概率相等的,那么当走到该河的左端点时,船的位置也是任意的,最快渡河就是刚好船在左端点,渡河时间L/V,最慢就是船刚好从左端点走了,那么它会走到右端点,再回来,时间是2L/V,再车我过去+L/V,总共是3L/V。那么平均下来我渡一条河的时间是2L/V啦。有n条河,那么将渡每条河的期望之和为: ∑ 2L/V 。再加上在陆地上的时间,就是D减去所有河的长度。
1 #include <bits/stdc++.h> 2 #define pii pair<int,int> 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 using namespace std; 6 const int N=10086; 7 8 int main() 9 { 10 freopen("input.txt", "r", stdin); 11 int Case=0, n, d, p, L, v ; 12 13 while(scanf("%d %d", &n, &d), n+d) 14 { 15 double ans=0; 16 for(int i=0; i<n; i++) //每条河 17 { 18 scanf("%d%d%d",&p, &L, &v ); //跟p完全没有干系 19 ans+=(double)2*L/v; //每条河的期望。 20 d-=L; 21 } 22 23 printf("Case %d: %.3f ", ++Case, ans+d); 24 } 25 return 0; 26 }