POJChallengeRound2 Tree 【数学期望】

题目分析:

我们令$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 }

猜你喜欢

转载自www.cnblogs.com/Menhera/p/10402849.html