这道题。。。好像是第一道我自己切出来的黑题。。。

先说一句,牛顿二项式蒟蒻并不会,可以说是直接套结论。

求诸位老爷轻喷。


这道题用卡特兰数搞。

卡特兰数这玩意从普及组初赛一路考到省选,十分有用。

如果不清楚这个概念的话可以看一下这里

卡特兰数是有两种计算方法:

1) 用递推算。

2) 用排列组合。

用它解题的流程一般是先说明所求的问题可以归到第一类中,然后再用第二类来计算具体的值。

这道题就可以用卡特兰数水过。


我们假设\(f_i\)表示节点数为i的二叉树有多少种。

那么可以发现存在这样的关系:\(f_i=\sum_{k=1}^{i-1}f_{k}f_{i-k-1}\)。

这个东西满足卡特兰数的第一类表示方法。

所以运用第二类表示方法就可以得到\(f_i=\frac{1}{n+1}C^n_{2n}\)。

现在我们用\(h_i\)表示节点数为i的二叉树的叶子节点数量。

那根据\(f_i\)的值我们就可以得出递推式:\(h_i=2\sum_{k=0}^{i-1}h_kf_{i-k-1}\)

也就是\(h_i=C^{i-1}_{2i-2}\)

那么最终的答案就是\(\frac{h_i}{f_i}=\frac{C^{i-1}_{2i-2}}{\frac{1}{n+1}C^n_{2n}}=\frac{n(n+1)}{2(2n-1)}\)。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define qwq int
#define QAQ double
#define re register
using namespace std;
namespace Solve{
inline void read(qwq &x){
x=0;qwq f=1;char c=getchar();
for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
x*=f;
}
qwq n;
QAQ ans;
inline void solve(){
read(n);
ans=(QAQ)n*(QAQ)(n+1)/(QAQ)(2*n-1)/2;
printf("%.9lf",ans);
}
}
using namespace Solve;
qwq main(){
solve();
}

题解 P3978 【[TJOI2015]概率论】的更多相关文章

  1. P3978 [TJOI2015]概率论

    \(\color{#0066ff}{ 题目描述 }\) 为了提高智商,ZJY开始学习概率论.有一天,她想到了这样一个问题:对于一棵随机生成的n个结点的有根二叉树(所有互相不同构的形态等概率出现),它的 ...

  2. [洛谷P3978][TJOI2015]概率论

    题目大意:对于一棵随机生成的$n$个结点的有根二叉树,所有不同构的形态等概率出现(这里同构当且仅当两棵二叉树根相同,并且相同节点的左儿子和右儿子都相同),求叶子节点个数的期望是多少? 题解:令$f_n ...

  3. 并不对劲的bzoj4001:loj2105:p3978:[TJOI2015]概率论

    题目大意 随机生成一棵\(n\)(n\leq10^9)个节点的有根二叉树,问叶子结点个数的期望. 题解 subtask 1:\(n\leq100\),70pts 结论:不同的\(n\)个节点的有根二叉 ...

  4. luogu P3978 [TJOI2015]概率论

    看着就是要打表找规律 使用以下代码 for(int i=3;i<=20;i++) { int a1=0,a2=0; for(int j=1;j<i;j++) { for(int k=0;k ...

  5. 4001: [TJOI2015]概率论

    4001: [TJOI2015]概率论 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 262  Solved: 108[Submit][Status] ...

  6. 【BZOJ4001】[TJOI2015]概率论(生成函数)

    [BZOJ4001][TJOI2015]概率论(生成函数) 题面 BZOJ 洛谷 题解 这题好仙啊.... 设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶 ...

  7. bzoj4001: [TJOI2015]概率论

    题目链接 bzoj4001: [TJOI2015]概率论 题解 生成函数+求导 设\(g(n)\)表示有\(n\)个节点的二叉树的个数,\(g(0) = 1\) 设\(f(x)\)表示\(n\)个节点 ...

  8. [TJOI2015]概率论

    [TJOI2015]概率论 史上最短黑题 看起来一脸懵逼,没有取模,1e-9 根据期望定义,发现 分母是一个卡特兰数,,,,不能直接算 所以考虑怎么消掉一些东西 gn表示n个点的叶子个数和,fn表示n ...

  9. 【BZOJ4001】【Luogu P3978】 [TJOI2015]概率论

    题目描述: Description: Input 输入一个正整数N,代表有根树的结点数 Output 输出这棵树期望的叶子节点数.要求误差小于1e-9 Sample Input 1 Sample Ou ...

随机推荐

  1. ORA-12560: TNS: 协议适配器错误(oracle service 已启动)

    如果是安装完 oracle 客户端之后才出现的这个问题,请往下看 安装 oracle client 时,会配置一个客户端的监听,如果电脑上之前安装过 oracle service 就会和服务的监听冲突 ...

  2. 在本地生成ssh-key 免密码远程clone GitLab中的项目到本地

    每次项目push.pull都需要输入账号和密码,很烦,方便免密pull与push代码,在本地需要用git bash 创建一个公钥,然后在gitlab中把公钥保存下来. 步骤如下: 1.打开 git b ...

  3. 《AndroidStudio每日一贴》3.高速切换代码风格、配色方案和键盘

    <AndroidStudio每日一贴>3.高速切换代码风格.配色方案和键盘 高速切换代码风格.配色方案和键盘,使用快捷键: control + ~ 很多其它有用技巧请查看<Andro ...

  4. LeetCode——Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  5. UVA 11609 - Anne's game cayley定理

    Lily: “Chantarelle was part of my exotic phase.”Buffy: “It’s nice. It’s a mushroom.”Lily: “It is? Tha ...

  6. 没有被广泛采用的box-sizing属性

    在标准盒模型下设置的width和height只是内容的宽和高,但在设置了宽和高的情况下若还要设置border.margin.padding等时,会发生溢出的现象,因此需要将盒模型更改. box-siz ...

  7. MyEclipse安装TestNG

    1.获取TestNG运行包. (1).直接下载*.jar包并导入项目中. (2).maven下载. http://testng.org/doc/download.html 2.为IDE加载TestNG ...

  8. spring事务,TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

    在aop配置事务控制或注解式控制事务中,try...catch...会使事务失效,可在catch中抛出运行时异常throw new RuntimeException(e)或者手动回滚Transacti ...

  9. Web api 测试 工具WebApiTestClient

    1.打开Nuget  安装 WebApiTestClient 2.在HelpPageConfig.cs 里面添加这段文字 config.SetDocumentationProvider(new Xml ...

  10. 异步编程(二)基于事件的异步编程模式 (EAP)

    一.引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式——APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题——不支持对异步操作的取消和没有提供对进 ...