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

题面

BZOJ

洛谷

题解

这题好仙啊。。。。

设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶子个数。

最终要求的东西就是\(\frac{f_n}{g_n}\)。

考虑这个玩意怎么转移,先考虑二叉树个数,即怎么求\(f_n\)。

每次我们认为新加入的点作为根节点,那么接下来只需要枚举其左右子树大小就行了,所以得到:

\[g_n=\sum_{i=0}^{n-1}g_ig_{n-1-i}
\]

然后考虑怎么求\(f\),我们还是可以枚举一侧的左子树大小,那么只考虑左子树的叶子节点个数,这样子乘上右侧的方案数就是答案。然后左右还可以交换。所以有:

\[f_n=2\sum_{i=0}^{n-1}g_if_{n-1-i}
\]

设\(G(x)\)为\(g\)的生成函数,得到:\(G(x)=G(x)^2x+1\),解出来\(G(x)=\frac{1-\sqrt{1-4x}}{2x}\)。

类似的,\(F(x)=2G(x)F(x)x+x\),解出来\(F(x)=\frac{x}{1-2G(x)x}\)。

再把\(G(x)\)带进去,可以解出来\(F(x)=\frac{x}{\sqrt{1-4x}}\)。

发现\((xG(x))'=\frac{1}{\sqrt{1-4x}}=\frac{F(x)}{x}\),进一步可以得到\(f_n=g_{n-1}\)。

然后\(g\)是卡特兰数,所以得到通项\(\frac{2n\choose n}{n+1}\)。

然后答案就是\(\frac{n(n+1)}{2(2n+1)}\)了。

#include<cstdio>
using namespace std;
int main()
{
double n;scanf("%lf",&n);
printf("%.9lf\n",n*(n+1)/(2*(n+n-1)));
return 0;
}

【BZOJ4001】[TJOI2015]概率论(生成函数)的更多相关文章

  1. bzoj4001: [TJOI2015]概率论

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

  2. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)

    设f(n)为n个节点的二叉树个数,g(n)为n个节点的二叉树的叶子数量之和.则答案为g(n)/f(n). 显然f(n)为卡特兰数.有递推式f(n)=Σf(i)f(n-i-1) (i=0~n-1). 类 ...

  3. 2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)

    传送门 生成函数好题. 题意简述:求nnn个点的树的叶子数期望值. 思路: 考虑fnf_nfn​表示nnn个节点的树的数量. 所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0) ...

  4. 【bzoj4001】[TJOI2015]概率论 生成函数+导数

    题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 题解 生成函数+导数 先考虑节点个数为$n ...

  5. BZOJ4001 [TJOI2015]概率论 【生成函数】

    题目链接 BZOJ4001 题解 Miskcoo 太神了,orz #include<algorithm> #include<iostream> #include<cstr ...

  6. BZOJ4001[TJOI2015]概率论——卡特兰数

    题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 提示 1<=N<=10^9 设 ...

  7. BZOJ4001:[TJOI2015]概率论(卡特兰数,概率期望)

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

  8. 4001: [TJOI2015]概率论

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

  9. [TJOI2015]概率论

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

随机推荐

  1. 学习笔记—JVM

    JVM结构 JVM总体结构图 类加载子系统与方法区: 类加载子系统负责从文件系统和网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间. 除了类信息外,方法区中还可能会存放运行时常量池 ...

  2. FreeNas搭建踩坑指南(一)

    0x00 背景 最近公司的旧群晖服务器Raid6,因为同时坏了两块硬盘存储池损毁,所以领导决定买了Dell R730自己搭NAS,选来选去最后选了FreeNAS,这里记录一些踩过的坑. 0x01 问题 ...

  3. .Net Core 学习笔记1——包、元包、框架

    .Net Core 是由NuGet包(package)组成的平台. 一起使用的多个包的集合:元包(Metapackage) package 包 (对应以前的程序集概念) Framework 框架 as ...

  4. 利用更快的r-cnn深度学习进行目标检测

    此示例演示如何使用名为“更快r-cnn(具有卷积神经网络的区域)”的深度学习技术来训练对象探测器. 概述 此示例演示如何训练用于检测车辆的更快r-cnn对象探测器.更快的r-nnn [1]是r-cnn ...

  5. VUE新版扫码下单必选分类设置FAQ

    使用场景:商家想要设置某些分类下的商品设置必选,否则不能下单.如某火锅店,商家想要设置汤底这个分类下的商品,顾客扫码下单的时候必须选择一份才能下单,此时 就可以使用这个功能 配置步骤和注意事项如下: ...

  6. C#中USB转串口的拔插捕获

    // usb消息定义 public const int WM_DEVICE_CHANGE = 0x219; public const int DBT_DEVICEARRIVAL = 0x8000; p ...

  7. Linux(二)—— Unix&Linux 的基本概念

    Linux(二)-- Unix&Linux 的基本概念 计算机 = 主机(host)+ 终端(terminal) 主机 = 内核 + 实用工具 内核(kernel) 当计算机启动时,计算机要经 ...

  8. 对const的总结与思考

    今天偶然想起const这一关键字,再加之以前几种const修饰指针方式让我印象深刻(混淆不清),重新回顾了一下,自己对这个关键词也又有了更加深刻的理解,所以总结一下. 一.const的定义 const ...

  9. Mysql语句删除主键的自增

    ALTER TABLE 表名MODIFY COLUMN 字段名 int(2) NOT NULL FIRST ;

  10. CSAPP:第十一章 网络编程

    CSAPP:第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型   每个网络应用都是基于客户端-服务器模型.采用这个模型,一个应用是 ...