zoukankan      html  css  js  c++  java
  • P3978 [TJOI2015]概率论

    传送门

    $rqy$ 的题解好神啊....

    设 $f_n$ 表示 $n$ 个点的二叉树个数,$g_n$ 表示所有 $f_n$ 颗二叉树的叶子节点总数

    那么答案就是 $g_n/f_n$,首先 $f_n$ 显然就是 $Catalan$ 数列

    打表可以发现 $g_n=nf_{n-1}$,证明很神

    因为一个 $n$ 个节点的二叉树,假设有 $k$ 个叶子,那么依次删除这 $k$ 个叶子就会得到 $k$ 个 $n-1$ 个节点的二叉树

    而 $g_n$ 其实就是所有 $n$ 个节点的二叉树,删除叶子的次数和,也等于删除后出现的二叉树数量(可以相同)

    对于一个 $n-1$ 个节点的二叉树,显然它一定有且只有 $n$ 位置可以挂叶子,那么从 $n$ 个节点删成 $n-1$ 个节点时这颗树就会出现 $n$ 次

    所以得到 $g_n=nf_{n-1}$

    然后化一波式子就可以得到答案了

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    typedef long double ldb;
    inline int read()
    {
        int x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
        while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
        return x*f;
    }
    ldb n;
    int main()
    {
        n=read();
        printf("%.12Lf
    ",n*(n+1)/(2*(2*n-1)));
        return 0;
    }
  • 相关阅读:
    mysql学习总结(四)
    mysql学习总结(三)
    mysql学习总结(二)
    mysql学习总结
    学习总结(三十)
    断点续传
    错误总结
    学习总结(三十六)
    学习总结(三十五)
    Linux命令
  • 原文地址:https://www.cnblogs.com/LLTYYC/p/11361626.html
Copyright © 2011-2022 走看看