题目大意

随机生成一棵\(n\)(n\leq10^9)个节点的有根二叉树,问叶子结点个数的期望。

题解
subtask 1:\(n\leq100\),70pts

结论:不同的\(n\)个节点的有根二叉树有\(\frac{C_{2\times n}^{n}}{n+1}\)(也就是卡特兰数)个。

设\(f(i)\)表示\(i\)个节点的有根二叉树期望有几个叶子结点。

计算\(f(i)\)时考虑除根以外\(i-1\)个节点哪些放左边,哪些放右边。\(\Theta(n^2)\)。

subtask 2:\(n\leq 10^9\),30pts

将\(f(i)\times \frac{C_{2\times n}^{n}}{n+1}\)打表,得:1,2,6,20,70,252……

也就是:\(1\times 1,2\times 1,3\times 2,4\times 5,5\times 14,6\times 42,.....\)

有:\(f(i)\times \frac{C_{2\times n}^{n}}{n+1}=i\times \frac{C_{2\times (n-1)}^{n-1}}{n}\)

\(f(i)=\frac{i\times f(i)\times \frac{C_{2\times (n-1)}^{n-1}}{n}}{\frac{C_{2\times n}^{n}}{n+1}}=\frac{i\times(i+1)}{2\times (2\times i-1)}\)

代码
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define view(u,k) for(int k=fir[u];~k;k=nxt[k])
#define LL long long
#define D double
using namespace std;
int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
void write(int x)
{
if(x==0){putchar('0'),putchar('\n');return;}
int f=0;char ch[20];
if(x<0)putchar('-'),x=-x;
while(x)ch[++f]=x%10+'0',x/=10;
while(f)putchar(ch[f--]);
putchar('\n');
return;
}
int n;
//D g[107],f[107];
int main()
{
n=read();
/*f[0]=0,g[0]=g[1]=f[1]=1;
rep(i,2,n)
{
rep(j,0,i-1)g[i]+=g[j]*g[i-j-1];
rep(j,0,i-1)f[i]+=g[j]*g[i-j-1]/g[i]*(f[j]+f[i-j-1]);
}
*/
printf("%.9lf",n*(n+1.0)/2.0/(2.0*n-1.0));
return 0;
}
一些感想

学习卡特兰数中……

并不对劲的bzoj4001:loj2105:p3978:[TJOI2015]概率论的更多相关文章

  1. P3978 [TJOI2015]概率论

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

  2. 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 ...

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

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

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

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

  5. bzoj4001: [TJOI2015]概率论

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

  6. 4001: [TJOI2015]概率论

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

  7. [TJOI2015]概率论

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

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

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

  9. 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). 类 ...

随机推荐

  1. 8. 使用Zuul构建微服务网关

                    使用Zuul构建微服务网关 8.1. 为什么要使用微服务网关 8.2. Zuul简介 8.3. 编写Zuul微服务网关 8.4. Zuul的路由端点 8.5. Zuul ...

  2. redis服务及其配置与应用(window 环境下)

    一.redis简介:Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API(源自百度百科),个人更喜欢下面的解释:我们 ...

  3. zookeeper系列(九)zookeeper的会话详解

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6103870.html尊重原创,大家共同学习: 一.前言 ...

  4. Go 通道(channel)与协程间通信

    协程间通信 协程中可以使用共享变量来通信,但是很不提倡这样做,因为这种方式给所有的共享内存的多线程都带来了困难. 在 Go 中有一种特殊的类型,通道(channel),就像一个可以用于发送类型化数据的 ...

  5. 【零基础】搞定zabbix安装

    一.前言 最近想做服务器压力测试,测试软件找到了,突然发现还没有很好的办法监控服务器运行情况,之前用过zabbix,所以想到说要不就用zabbix来监控服务器运情况,不过这次就要好好研究下zabbix ...

  6. mui.toast样式风格及位置修改教程

    mui.toast样式风格及位置修改教程 使用了mui.toast来实现可自动消失的信息提示效果. 但默认的显示效果太差了,很不显示,而且是在底部的. 如下图: 想改到屏幕的中间位置,再改大一点. 但 ...

  7. Linux设备驱动程序 之 获取当前时间

    墙上时间 内核一般通过jiffies来获取当前时间,该数值表示的是最近一次系统启动到当前的时间间隔,它和设备驱动程序无关,因为它的声明期只限于系统的运行期:但是驱动程序可以用jiffies来计算不同事 ...

  8. Nginx数据结构之内存池

    基本结构 1. ngx_pool_t struct ngx_pool_s { ngx_pool_data_t d; size_t max; ngx_pool_t *current; ngx_chain ...

  9. C语言中函数strcpy ,strncpy ,strlcpy的用法

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  10. Linux命令对应的英文全称【转载】

    su:Swith user  切换用户,切换到root用户cat: Concatenate  串联uname: Unix name  系统名称df: Disk free  空余硬盘du: Disk u ...