当前位置: 首页 > news >正文

P3978 概率论

膜拜 wck


做法

考虑一个经典问题:n个点的二叉树数量是多少。考虑转括号序,一个节点是一个括号,左子树放在括号内,右子树放在括号右侧。可得 \(n\) 个点二叉树数量为 \(Cat_n\)

我们注意到叶子在括号序上形如 \(())\) 或在序列末尾的 \(()\),考虑拆贡献,计算括号序上一个位置能加叶子的长 \(2(n-1)\) 的括号序的方案数,答案即为方案数求和除以总方案数。再拆一次贡献,方案数求和可以变为对每一个长 \(2(n-1)\) 的括号序计算能加叶子的位置数,因为每一个 \()\) 和末尾能加叶子,因此位置数恒为 \(n\)。因此答案为 \(\frac{n\cdot Cat_{n-1}}{Cat_n}=\frac{n\cdot\frac{(2n-2)!}{(n-1)!n!}}{\frac{(2n)!}{n!(n+1)!}}=\frac{n(n+1)}{2(2n-1)}\)

另一种角度

考虑在 \(n-1\) 个点的树上加一个叶子,设有两个儿子的点数为 \(a\),一个儿子的点数为 \(b\),叶节点数为 \(c\),则加叶子方案为 \(b+2c\),根据 \(a+b+c=n-1\)\(2a+b=n-2\) 可得 \(b+2c=2(n-1)-(n-2)=n\)\(n\) 个点数的叶子总数等于 \(n-1\) 个点二叉树数量乘以 \(n\),即 \(n\cdot Cat_{n-1}\)

code

#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){scanf("%lld",&n);printf("%.9Lf\n",(long double)n/(4*n-2)*(n+1));return 0;
}
http://www.jsqmd.com/news/34558/

相关文章:

  • 从iPhone转移到itel手机的联系人转移指南 - 实践
  • JT808,JT1078 —— AAC编码 —— 部标机语音对讲Java实现
  • DP 总结
  • 2025年11月7日
  • 【开题答辩全过程】以 爱运动健身小程序的设计与实现为例,包含答辩的障碍和答案
  • 高并发下如何保证 Caffeine + Redis 多级缓存的一致性问题?MySQL、Redis 缓存一致性问题? - 指南
  • 2025-11-07 PQ v.Next日志记录
  • [python刷题记录]-轮转数组-普通数组-中等
  • QT正在复兴?兰亭妙微带你看懂工业软件设计的新风口
  • 低代码如何真正降低企业数字化转型成本?
  • 低代码开发的核心流程
  • 字符串杂题
  • 低代码 vs 无代码:90% 的企业都分不清的核心差异
  • 轻言轻语
  • NIFI 使用HTTP 作为数据源接收数据
  • CSPS 2025 游寄 / 反思
  • FCN-ResNet18 语义分割完整实现详解
  • 《代码大全 2》观后感(六):错误处理 —— 代码的 “安全气囊”
  • 在龟骨的第二次课的讲解
  • P5610 解题报告
  • fcitx5里有趣的东西
  • 自定义MCP Server
  • 英语_错题集_25-11
  • Ai元人文随想:守护时光的印记
  • 浅谈模拟系列算法
  • 第三十六篇
  • Ai元人文随想:三值纠缠中的人文关怀
  • R语言实现多组样本两两t检验的完整教程
  • 实用指南:TensorFlow深度学习实战(40)——图神经网络(GNN)
  • 2023QDEZ男人八题赛后总结