码迷,mamicode.com
首页 > 其他好文 > 详细

POJChallengeRound2 Tree 【数学期望】

时间:2019-02-19 18:50:44      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:std   pre   size   challenge   while   期望   for   数学期望   大于   

题目分析:

我们令$G(x)$表示前$x$个点的平均深度,$F(x)$表示第$x$个点的期望深度。

有$F(x) = G(x-1)+1$,$G(x) = G(x-1)+\frac{1}{x}$

所以答案相当于一个调和级数和的前缀和,我们对小于1e6的暴力处理,大于1e6的利用欧拉常数做。

 

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const double euler = 0.57721566490153286060651209;
 5 
 6 long long n;
 7 
 8 int main(){
 9     while(scanf("%lld",&n) == 1){
10     if(n <= 1e6){
11         double ans = 0;
12         for(int i=1;i<=n;i++) ans += (double)(n-i+1)/(double)i;
13         ans /= n;
14         printf("%.10lf\n",ans);
15     }else{
16         double hh = log(n)+euler;
17         hh = hh*(n+1)-n;
18         hh /= n;
19         printf("%.10lf\n",hh);
20     }
21     }
22     return 0;
23 }

 

POJChallengeRound2 Tree 【数学期望】

标签:std   pre   size   challenge   while   期望   for   数学期望   大于   

原文地址:https://www.cnblogs.com/Menhera/p/10402849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!