【BZOJ4001】[TJOI2015] 概率论(卡特兰数)

点此看题面

大致题意: 问你一棵(n)个节点的有根二叉树叶节点的期望个数。

大致思路

看到期望,比较显然可以想到设(num_i)(i)个节点的二叉树个数,(tot_i)为所有(i)个节点的二叉树的叶节点总数。

则答案显然为(frac{tot_i}{num_i})

(num_i)其实就是一个卡特兰数(这其实就是(NOIP2018)提高组初赛卷中(T8)(A)选项改正后的结果啊),故可以得到(num_i=(2n)!/(n+1)!/n!)

通过找规律可以发现(tot_i=ncdot num_{i-1})

于是答案就是(frac{ncdot num_{i-1}}{num_i}=frac{ncdot(2n-2)!/n!/(n-1)!}{(2n)!/(n+1)!/n!}=frac{n}{2n(2n-1)/(n+1)/n}=frac{n(n+1)}{4n-2})

代码也十分简洁。

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    scanf("%d",&n),printf("%.9lf",1.0*n*(n+1)/(4LL*n-2));//求出n(n+1)/(4n-2)
    return 0;
}
原文地址:https://www.cnblogs.com/chenxiaoran666/p/BZOJ4001.html