Link

简要题意:称一个长为 \(2^n-1\) 的排列 \(P\) 像堆,如果 \(P_i \lt P_{2i}\),且 \(P_i \lt P_{2i+1}\)。给定 \(a,b\),设 \(u=2^a,v=2^{b+1}-1\),在所有像堆的排列中任取一个,求 \(P_u \lt P_v\) 的概率。

既然这个排列像堆,那就把这个问题放在满二叉树上解决。结点 \(i\) 的权值是 \(P_i\),子结点是 \(2i\) 和 \(2i+1\)。

首先,如果把结点编号,然后按照权值排列,那么就是对这棵满二叉树做了一次拓扑排序,这里父结点向子结点连有向边。那么,我们只需要考虑结点的一个排列 \(S\),使得 \(i\) 在其子树的前面。

题目中给定的 \(u,v\) 分别是第 \(a+1\) 层最左边的结点和第 \(b+1\) 层最右边的结点。而题目要求的 \(P_u \lt P_v\) 可以看作是从 \(u\) 向 \(v\) 连了一条有向边,或者说 \(S\) 中 \(u\) 必须在 \(v\) 前面。(下面的叙述中,涉及树的概念都是没有考虑这条边的)

这个拓扑序的开头当然是 \(1\),然后整个图被分成了两棵满二叉树,从一棵的某个点向另一棵的某个点连边。

接下来,当然是选择一棵树的根结点。然后,这棵树又被分成了两棵树,其中有一棵是不含 \(u,v\) 之一的。那么,在安排好剩下的两棵树之后,将这棵树随意插入已有的排列即可。

想到这里,一个 DP 的方式呼之欲出:设 \(dp_{i,j}\) 表示剩下一棵 \(i\) 层的满二叉树和一棵 \(j\) 层的满二叉树的方案数,则 \(dp_{i,j}\) 会从 \(dp_{i-1,j}\) 和 \(dp_{i,j-1}\) 转移而来。注意,由于 \(u,v\) 距离叶子层的深度是不变的,所以这样的状态定义已经足够。再用 \(f_{i,j}\) 表示相应的概率。

我们还需要考虑一个普通的 \(i\) 层满二叉树的拓扑序总数。设为 \(S_i\)。

先求 \(S_i\) 的递推式。第一步是选择根结点,然后是将两棵子树的所有排列方式放入拓扑序中。所有排列有 \(S_{i-1}^2\) 种。每棵子树的拓扑序长度为 \(2^{i-1}-1\),所以插入的方式有 \(C_{2^i-2}^{2^{i-1}-1}\) 种。于是

\[S_i=S_{i-1}^2 \times C_{2^i-2}^{2^{i-1}-1}
\]

设 \(u,v\) 分别在倒数第 \(A,B\) 层,则 DP 的初始值为 \(f_{A-1,j}=1\) 对 \(j \ge B\) 成立。

与前面类似可得 \(dp_{i,j}\) 的递推式为:

\[dp_{i,j}=dp_{i-1,j} \times S_{i-1} \times C_{2^i+2^j-3}^{2^{i-1}-1}+dp_{i,j-1} \times S_{j-1} \times C_{2^i+2^j-3}^{2^{j-1}-1}
\]

又由于

\[f_{i,j}=\frac{dp_{i,j}}{S_i \times S_j \times C_{2^i+2^j-2}^{2^i-1}}
\]

所以

\[f_{i,j}=\frac{dp_{i-1,j} \times S_{i-1} \times C_{2^i+2^j-3}^{2^{i-1}-1}+dp_{i,j-1} \times S_{j-1} \times C_{2^i+2^j-3}^{2^{j-1}-1}}{S_i \times S_j \times C_{2^i+2^j-2}^{2^i-1}}
\]
\[=\frac{f_{i-1,j} \times S_{i-1}^2 \times S_j \times C_{2^{i-1}+2^j-2}^{2^{i-1}-1} \times C_{2^i+2^j-3}^{2^{i-1}-1}}{S_i \times S_j \times C_{2^i+2^j-2}^{2^i-1}}+\frac{f_{i,j-1} \times S_{j-1}^2 \times S_i \times C_{2^i+2^{j-1}-2}^{2^{j-1}-1} \times C_{2^i+2^j-3}^{2^{j-1}-1}}{S_i \times S_j \times C_{2^i+2^j-2}^{2^j-1}}
\]
\[=f_{i-1,j} \times \frac{C_{2^{i-1}+2^j-2}^{2^{i-1}-1} \times C_{2^i+2^j-3}^{2^{i-1}-1}}{C_{2^i-2}^{2^{i-1}-1} \times C_{2^i+2^j-2}^{2^i-1}}+f_{i,j-1} \times \frac{C_{2^i+2^{j-1}-2}^{2^{j-1}-1} \times C_{2^i+2^j-3}^{2^{j-1}-1}}{C_{2^j-2}^{2^{j-1}-1} \times C_{2^i+2^j-2}^{2^j-1}}
\]

结合

\[\frac{C_{2^{i-1}+2^j-2}^{2^{i-1}-1} \times C_{2^i+2^j-3}^{2^{i-1}-1}}{C_{2^i-2}^{2^{i-1}-1} \times C_{2^i+2^j-2}^{2^i-1}}
\]
\[=\frac{\frac{(2^{i-1}+2^j-2)!\times(2^i+2^j-3)!}{(2^{i-1}-1)!\times(2^j-1)!\times(2^{i-1}-1)!\times(2^{i-1}+2^j-2)!}}{\frac{(2^i-2)!\times(2^i+2^j-2)!}{(2^{i-1}-1)!\times(2^{i-1}-1)!\times(2^i-1)!\times(2^j-1)!}}
\]
\[=\frac{(2^i+2^j-3)!\times(2^i-1)!}{(2^i+2^j-2)!\times(2^i-2)!}
\]
\[=\frac{2^i-1}{2^i+2^j-2}
\]

最后我们得到了一个漂亮的表达式:

\[f_{i,j}=f_{i-1,j}\times\frac{2^i-1}{2^i+2^j-2}+f_{i,j-1}\times\frac{2^j-1}{2^i+2^j-2}
\]

答案是 \(f_{n-1,n-1}\)。

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=5005,mod=998244353;
int n,A,B;
long long pwr2[N],p[N][N],f[N][N];
int power(int a,int b){
int c=1;
for(;b;b>>=1){
if(b&1)c=1ll*c*a%mod;
a=1ll*a*a%mod;
}
return c;
}
int main(){
scanf("%d%d%d",&n,&A,&B);
A=n-A;B=n-B;
for(int i=1;i<=n;i++)pwr2[i]=power(2,i);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
p[i][j]=(pwr2[i]-1)*power(pwr2[i]+pwr2[j]-2,mod-2)%mod;
for(int i=B;i<=n;i++)f[A-1][i]=1;
for(int i=A;i<=n;i++)
for(int j=B;j<=n;j++)
f[i][j]=(f[i-1][j]*p[i][j]%mod+f[i][j-1]*p[j][i]%mod)%mod;
printf("%d\n",f[n-1][n-1]);
return 0;
}

Solution - AGC060C的更多相关文章

  1. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  2. Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架

    Enterprise Solution 是一套管理软件开发框架,在这个框架基础上开发出一套企业资源计划系统Enterprise Edition. 现将Enterprise Solution开发过程中遇 ...

  3. Windows 10 部署Enterprise Solution 5.5

    Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...

  4. Enterprise Solution 企业资源计划管理软件 C/S架构,支持64位系统,企业全面应用集成,制造业信息化

    Enterprise Solution是一套完整的企业资源计划系统,功能符合众多制造业客户要求.系统以.NET Framework技术作为开发架构,完善的功能可有效地帮助企业进行运营策划,减低成本,如 ...

  5. Dynamics CRM 2015-超大Solution导入问题

    我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...

  6. WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION

    开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...

  7. Codility NumberSolitaire Solution

    1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...

  8. codility flags solution

    How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...

  9. The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C

    Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/C Description standard input/output After ...

  10. The Solution of UESTC 2016 Summer Training #1 Div.2 Problem B

    Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/B Description standard input/output Althou ...

随机推荐

  1. 3D Object Detection Essay Reading 2024.03.27

    Point Transformer V3: Simpler, Faster, Stronger publish:CVPR2024 paper:https://arxiv.org/abs/2312.10 ...

  2. Kingbase ES 函数返回-return语句

    文章概要: 本文在https://www.cnblogs.com/kingbase/p/15703611.html 一文的基础上总结了Kingbase ES中函数能支持的return语句,整体上兼容o ...

  3. #线段树#洛谷 4588 [TJOI2018]数学计算

    题目传送门 分析 由于曾经做过原题 所以就直接说了,因为每个数最多被除掉一次 所以可以用线段树维护区间乘,也就很简单了,删除就单点修改就行了 代码 #include <cstdio> #i ...

  4. #区间dp#CF1114D Flood Fill

    题目 有一个长度为\(n\)的颜色序列,在游戏前选择一个固定的位置, 若当前轮该位置的颜色为\(x\),那么可以将所有颜色为\(x\)的连通块改为任意颜色, 问最少进行多少轮使得区间\([1,n]\) ...

  5. C语言 06 无符号数

    所有的数据底层都是采用二进制来进行保存的. 第一位用于保存符号位. 如果不考虑这个符号位,那么所有的数都是按照正数来表示. 比如考虑了符号位的 char 类型: 考虑符号表示范围:-128 ~ 127 ...

  6. openGauss Cluster Manager RTO Test

    一.环境介绍 软件环境 类别 版本 下载链接 备注 OS openEuler 20.03 (LTS) https://repo.openeuler.org/openEuler-20.03-LTS/IS ...

  7. WPF 像CSS一样使用 Font Awesome 图标字体

    WPF 像CSS一样使用 Font Awesome 图标字体 编写目的 WPF中使用这种图标字体不免会出现可读性差的问题,现阶段网络上有的大部分实现方式都是建立枚举,我感觉这样后续维护起来有些麻烦,需 ...

  8. 一、Unity调用Xcode封装方法(工程引用文件)

    1.Xcode新建Static Library 工程 (我起的名字是UnityExtend 可以在接下来的图中看到) 2.打包unity ios工程 unity打包ios 打出Xcode工程 3.打开 ...

  9. Native API在HarmonyOS应用工程中的使用指导

      HarmonyOS的应用必须用js来桥接native.需要使用ace_napi仓中提供的napi接口来处理js交互.napi提供的接口名与三方Node.js一致,目前支持部分接口,符号表见ace_ ...

  10. 为你推荐一款高效的IO组件——okio

    原文:https://mp.weixin.qq.com/s/XnNhSq8ESoslb2DQEzMbCQ,点击链接查看更多技术内容.   前不久,三方组件库上新了一批JS/eTS组件,其中就包括oki ...