首页 > 其他分享 >Luogu P3978 [TJOI2015] 概率论

Luogu P3978 [TJOI2015] 概率论

时间:2023-05-19 21:05:43浏览次数:42  
标签:frac P3978 Luogu times 叶子 二叉树 TJOI2015 2n 节点

定义 \(f_i\) 为 \(i\) 个节点组成的二叉树数量,\(g_i\) 为 \(i\) 个节点组成的二叉树的叶子节点个数之和

设当前 \(i\) 个节点组成的二叉树有 \(a\) 个叶子,容易发现分别删掉其中的 \(1\) 个叶子节点就能得到一个对应的 \(i - 1\) 个节点的二叉树,总共会有 \(a\) 颗,可以发现每一个叶子节点对应的二叉树都为 \(g_i\) 产生了 \(1\) 的贡献

再设有 \(b\) 个节点有 \(1\) 个孩子,\(c\) 个节点有 \(2\) 个孩子,首先有个很显然的结论 \(a + b + c = i\) 不进行证明,其次能发现还有个结论 \(b + 2\times c = i - 1\),证明考虑除了根节点其他节点都有父亲,\(b\) 代表着有 \(b\) 个儿子节点的 \(b\) 个父亲,\(c\) 代表 \(2\times c\) 个节点的 \(c\) 个父亲,所以和为除掉根节点的 \(i - 1\) 个节点

能发现对于这颗二叉树,要多一个叶子节点可以在 \(a\) 个节点的任意一个儿子下挂,\(b\) 个节点的剩余的那个儿子下挂,便有 \(2\times a + b\) 个位置可以挂,根据上述的 \(2\) 个结论可以推出对应数量 \(2\times a + b = 2\times (a + b + c) - (b + 2\times c) = 2\times i - (i - 1) = i + 1\)
所以可以知道每颗 \(i - 1\) 节点数的二叉树都可对 \(g_i\) 产生 \(i\) 的贡献,所以可得到 \(g_i = f_{i - 1}\times n\)

接下来考虑得到 \(f_i\),考虑枚举左子树的节点个数 \(j\),去掉根节点,右子树节点个数即为 \(i - j - 1\),注意也可以有一个子树没有节点,所以可得到 \(f_i = \sum\limits_{j = 0}^{i - 1} f_j\times f_{i - j - 1}\)
然后发现这是个卡特兰数,所以 \(f_i = \frac{C_{2n}^{n}}{n + 1}\)

最后答案根据定义显然即为 \(\frac{g_{n}}{f_{n}}\),当然是需要拆一下式子的
\(\frac{g_{n}}{f_{n}} = \frac{f_{n - 1}\times n}{f_{n}} = \frac{\frac{(2n - 2)!}{(n - 1)!\times (n - 1)!\times n}\times n}{\frac{(2n)!}{n!\times n!\times (n + 1)}} = \frac{(2n - 2)!\times n!\times n!\times n\times (n + 1)}{(2n)!\times (n - 1)!\times (n - 1)!\times n} = \frac{1\times n\times n\times 1\times (n + 1)}{(2n)\times (2n - 1)\times 1\times 1\times 1} = \frac{n\times (n + 1)}{2\times (2n - 1)}\)

// lhzawa(https://www.cnblogs.com/lhzawa/)
#include<bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    scanf("%lld", &n);
    long double ans = 1.0 * n * (n + 1) / 2 / (2 * n - 1);
    printf("%.9Lf\n", ans); 
    return 0;
}

标签:frac,P3978,Luogu,times,叶子,二叉树,TJOI2015,2n,节点
From: https://www.cnblogs.com/lhzawa/p/17416245.html

相关文章

  • Luogu P5664 [CSP-S2019] Emiya 家今天的饭
    发现“每种主要食材至多在\(\lfloor\frac{k}{2}\rfloor\)个菜中被使用”有一个性质,在不合法的情况下绝对只有\(1\)个主要食材的个数\(>\lfloor\frac{k}{2}\rfloor\),因为\(k-\lfloor\frac{k}{2}\rfloor-1\le\lfloor\frac{k}{2}\rfloor\)然后就能发现算不合法......
  • 刷题笔记:Luogu P3743
    题目传送门Solution最多能将这些设备一起使用多久,显然答案满足单调性(如果\(x<y\)而不能使用\(x\)时间则一定不能使用\(y\)时间)通俗一点,就是前边的时间不满足则后边一定不满足,也就是局部答案舍弃性,考虑二分时间至于check怎么写呢?和奶牛晒衣服有异曲同工之妙,若设二分出来的时间......
  • 刷题笔记:Luogu P1083 借教室
    题目传送门让结果最接近\(s\)值,显然我们要二分\(w\),check的写法可以直接暴力模拟,如果check(mid)<s则将r右移(通过读公式可以知道\(w\)越小检验值\(y\)就越大)但是这样会TLE,再读一下柿子:\(y_i=\sum\limits_{j=l_i}^{r_i}[w_j\geW]\times\sum\limits_{j=l_i}^{r_i}[w_j\geW]......
  • luogu P8340 [AHOI2022] 山河重整
    题面传送门牛逼题。solution首先来推一推性质。假设我们现在有一个合法的集合,覆盖了\([1,S]\),显然新加进去的数\(i\)不能\(\geqS+2\),而如果\(\leqS+1\)那么\([1,i+S]\)显然可以被覆盖到。因此有一个\(O(n^2)\)的dp:设选到了第\(i\)个数,总和为\(j\),要求\(j\geq......
  • Luogu P5520 [yLOI2019] 青原樱
    考虑先不种花,先算出“花之间空位的可行方案数”\(tot\),乘上花的排列的贡献就能算出答案,即\(tot\timesm!\)为答案所以只需算出“花之间空位的可行方案数”能发现,设\(x_i\)为第\(i\)朵花与第\(i-1\)朵花之间空位的数量,其中设第\(0\)朵花在\(0\)的位置,则发现会有以......
  • luogu P4690 [Ynoi2016] 镜中的昆虫 题解
    P4690[Ynoi2016]镜中的昆虫题解题意维护一个长为 \(n\) 的序列 \(a_i\),有 \(m\) 次操作。将区间 \([l,r]\) 的值修改为 \(x\)。询问区间 \([l,r]\) 出现了多少种不同的数,也就是说同一个数出现多次只算一个。题解感觉这道题还是比较有意思的,像是一堆套路......
  • 【题解】Luogu[P3750] [六省联考 2017] 分手是祝愿
    Link→小清新dp题,纪念自己的700ac(一个点只有两个状态开和不开,且按两下相当于没按,我们可以从大到小有亮的就按一下,如果我们按到了不需要按的键,就需要再按一下使他变回来。设\(f_i\)表示\(i\)个正确选择变为\(i-1\)个的期望操作次数。则有\(\dfrac{i}{n}\)概率按到......
  • 【题解】Luogu[P4900] 食堂
    一到推柿子题。题意即求\(\sum\limits^{n}_{i=1}\sum\limits^{i}_{j=1}\left\{\frac{i}{j}\bmodP\right\}\)对于\(\frac{i}{j}\bmodP\)我们知道即为\(i\)乘上\(j\)的逆元,即为\(i\cdot\mathrm{inv}(j)\)故:\[\begin{aligned}\sum^{n}_{i=1}\sum^{i}_{j=1}\l......
  • 【题解】Luogu[P6003] USACO20JAN Loan Repayment S
    模拟赛第一题(9pts考虑暴力。枚举\(x\),对于每个\(x\),模拟\(k\)天,判断其是否合法,找出最大的\(x\)。时间复杂度:\(O(n^2)\)36pts考虑优化先前暴力算法。我们不难发现当\(x\)合法时,必然有合法\(x_1\),当且仅当\(x_1<x\)。故\(x\)具有单调性,考虑二分答案。对于\(x......
  • 【题解】Luogu[P8818] CSP-S 2022 策略游戏
    一道简单区间rmq分类讨论题,考场上最后5分钟想出来,没写出来,退役了……给定两个序列\(A_{1},\dots,A_{n}\);\(B_1,\dots,B_n\)规定\(C_{i,j}=A_i\timesB_i\)。题目说小L和小Q必定选择最优策略,而小L先选,小Q后选,小L要使得\(C_{i,j}\)尽可能大,小Q要使得\(C_{i,j}\)......