1 条题解
-
0
E. 女孩排列 详细题解
题目核心理解
有一个长度为 的排列被隐藏。 给定该排列的前缀最大值出现位置 与后缀最大值出现位置 。
你需要求出满足条件的合法排列数量,答案对 取模。
前缀最大值:位置 是前缀最大值,当且仅当 严格大于它左边所有数。 后缀最大值:位置 是后缀最大值,当且仅当 严格大于它右边所有数。
核心思路
1. 关键合法性判定
- 排列的全局最大值 一定是最后一个前缀最大值,同时也是第一个后缀最大值。
- 前缀最大值必须从 开始,即 。
- 后缀最大值必须以 结束,即 。
- 全局最大值位置必须唯一:。
任意一条不满足,答案直接为 。
2. 结构与计数规则
设全局最大值位置为 。
-
左右数字分配 从 中选出 个数放在最大值左边,剩余放在右边。 方案数为组合数 。
-
左侧内部计数 前缀最大值序列将左侧划分为若干段。 每两个相邻前缀最大值之间的数可以任意排列,贡献为区间长度的阶乘。
-
右侧内部计数 后缀最大值序列将右侧划分为若干段。 每两个相邻后缀最大值之间的数可以任意排列,贡献同样为区间长度的阶乘。
3. 总方案
合法排列数 = 组合数 × 左侧阶乘乘积 × 右侧阶乘乘积。
算法流程
- 检查合法性:,不满足则输出 。
- 预处理阶乘与逆元,用于快速求组合数和阶乘。
- 计算组合数 。
- 遍历前缀最大值序列,计算相邻位置间区间长度的阶乘乘积。
- 遍历后缀最大值序列,计算相邻位置间区间长度的阶乘乘积。
- 三者相乘并对 取模,即为最终答案。
公式与复杂度分析
总答案公式:
$$ans = \dbinom{n-1}{pos-1} \times \left(\prod_{i=2}^{m_1} (p_i-p_{i-1}-1)!\right) \times \left(\prod_{i=2}^{m_2} (s_i-s_{i-1}-1)!\right) \pmod{10^9+7} $$复杂度
- 预处理阶乘与逆元:
- 每组测试用例:
- 总时间复杂度:
可轻松处理 、多组数据 的范围。
- 1
信息
- ID
- 6570
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者