POJChallengeRound2 Tree 【数学期望】

时间:2023-06-30 16:31:32

题目分析:

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

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

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

代码:

 #include<bits/stdc++.h>
using namespace std; const double euler = 0.57721566490153286060651209; long long n; int main(){
while(scanf("%lld",&n) == ){
if(n <= 1e6){
double ans = ;
for(int i=;i<=n;i++) ans += (double)(n-i+)/(double)i;
ans /= n;
printf("%.10lf\n",ans);
}else{
double hh = log(n)+euler;
hh = hh*(n+)-n;
hh /= n;
printf("%.10lf\n",hh);
}
}
return ;
}