1 条题解
-
0
题解
思路
把尚未写入题目的空前缀 也加入多重集合。令 表示值 的出现次数。任何隐藏数组都对应一条从 出发、每一步走到相邻整数、访问值 恰好 次的路径。
若某两个出现值之间有空缺,这条路径不可能存在。否则枚举最后的前缀和 ,可以从最大值向最小值逐层恢复必须已有的路径段,并用插板法统计在同一层插入往返段 的方案。
设出现值范围为 。对固定终点 ,定义辅助量 。从最高层向下递推:
$$d_v=c_{v+1}-d_{v+1}+[v\ge s]+[v\ge0]\qquad(L-1\le v<R-1).$$若 ,这个终点不可行。在第 层已经有 个可插入位置,需要补出 次访问,插板法给出
固定 的方案数是这些组合数之积,再对全部 求和。
做法
子任务 1:枚举隐藏数组
枚举全部 个 数组,计算并排序前缀和,与输入逐项比较。复杂度为 。
子任务 2:有界前缀值域
按上述递推计算固定终点的贡献需要 时间。若 ,可能的终点只有常数个,总复杂度为 。
子任务 3:完整组合计数
完整数据中值域宽度至多 。枚举每个可能终点并执行线性递推,总复杂度为 。预处理阶乘和逆阶乘后,每个组合数可在 时间求出。
正确性证明
引理 1
若 内存在某个 满足 ,则答案为零。
证明。 路径每一步只能在相邻整数之间移动。若它访问了空缺两侧的值,就必然访问 ;这与 矛盾。
引理 2
固定终点 后,递推式唯一确定每一层已有的路径段数量 。
证明。 从最高访问值向下看,最高层的每次访问都必须通过相邻层进入或离开,只有起点 和终点 会使进入数与离开数相差一。最高层给出初值;在相邻层之间应用同一流量守恒关系,即得到递推式。
引理 3
固定终点 时,第 层的补充方案数为 。
证明。 已有的 个路径段给出 个有序插入位置。还需加入 个互不区分的往返段;允许一个位置插入多个,故由插板法得到 $\binom{d_v+c_v-d_v-1}{c_v-d_v}=\binom{c_v-1}{c_v-d_v}$。
定理
算法输出所有可行隐藏数组的数量。
证明。 对每个终点 ,引理 2 唯一确定层间骨架;若边界不闭合则贡献为零。否则由引理 3,各层独立插入往返段,乘积恰好计数所有以 结束的路径。不同终点的路径互不相交,求和后得到全部隐藏数组。
复杂度
完整算法对每个测试用例的时间复杂度为 ,空间复杂度为 ;阶乘预处理为 。
- 1
信息
- ID
- 1431
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者