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. Oracle 获取月初、月末时间,获取上一月月初、月末时间

    select trunc(sysdate, 'mm'), last_day(trunc(sysdate)), trunc(add_months(trunc(sysdate), -1), 'mm'), ...

  2. quartus之LPM_DIVIDE

    quartus的IP测试之LPM_DIVIDE 1.基本作用 一个用于除法的IP,可以输入除数.被除数,得到商.余值. 2.基本测试 `timescale 1ns/1ns module divide_ ...

  3. Windows和Linux系统下的Conda环境迁移

    Motivation ​ 大家在学习Python的过程中,可能经常会遇到下面两种情况: 同一份代码,别人配置conda环境可以跑通,但你配置了N天,还不知道哪一步出现了差错,仍然跑不通代码,conda ...

  4. .net 发邮件的小工具,包含json,环境变量,命令行参数三种配置方式

    一.业务需求 在工作中遇到一个场景,软件bug或功能发布之后,会通知测试进行测试,要求写一个小工具能自动发送邮件,功能包含发送和抄送支持多个,因为只是通知没有写进附件功能,这个其他博客都有搜一下就可以 ...

  5. HMS Core助力开发者打造高品质游戏,共创智玩新生态

    2021年8月1日,华为HMS Core.Sparkle游戏应用创新沙龙在上海举行.会上,华为HMS Core团队与游戏行业开发者围绕3D图形渲染.网络加速.精准运营等多个话题,探讨了游戏应用开发技术 ...

  6. 【FAQ】用户访问次数不变,访问时长却突增2倍,分析服务发生数据异常该如何解决?

    在产品运营的工作过程中,需要每日关注产品的核心指标变化情况,监控其整体运营状况.华为分析服务提供查看吸引新用户卡片,该卡片展示了新增用户数.人均会话次数.人均访问时长.人均页面访问数.借助该页面运营可 ...

  7. Sarsa模型和Q_learning模型简记

    1. Sarsa模型 1.1 Sarsa类代码: class SarsaAgent(object): def __init__(self,state_n,action_n,learning_rate= ...

  8. pytest接口自动化搭建经验

    前言:目前公司的主要产品是一个web类型的产品:需要做一些自动化,目前的想法是只做接口自动化,不做ui的一个自动化,目前的思路是先对主流程做正常校验,后期再对每一个接口做校验: 一.版本信息: pyt ...

  9. 力扣512(MySQL)-游戏玩法分析Ⅱ(简单)

    题目: 需求:请编写一个 SQL 查询,描述每位玩家首次登陆的设备名称 查询结果格式在以下示例中: 解题思路: 方法一:使用dense_rank() over(partition by ...orde ...

  10. 力扣48(java)-旋转图像(中等)

    题目: 给定一个 n × n 的二维矩阵 matrix 表示一个图像.请你将图像顺时针旋转 90 度. 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要 使用另一个矩阵来旋转图像 ...