ABC378G 题解

前言

Update 2024.11.6

  • 突然发现一个错误,应该是:只需要保证在加入 \((i, A)\) 的时候,\((i + 1, A - 1)\) 已经有值了即可。

经过和 @gza 和 @ORzyzRO 的讨论应该会了这道题。谢谢你们。

前置知识:杨表基础知识,还有 Robinson–Schensted 对应(即两个形状相同的标准杨表与一个排列一一对应)

对于官方“状态数较少”的解释(来自 @masterhuang):在本题限制下杨表的形态数为 \((0, 0)\) 走到 \((a, b)\) 的方案数。

思路(采用了官方题解的大部分表述,但增加了一些内容)

在原题中,给定了最长递增子序列 (LIS = A) 和最长递减子序列 (LDS = B) 的长度,并且 \(P\) 的长度为 \((AB-1)\),因此 \(P\) 的标准杨表形状是唯一确定的,就是一个 A * B 的杨表扣掉右下方的格子。

\(n + 0.5\) 的限制即最后一个填的会使其恰好变成一个 A * B 的矩形,等价于要求 \(P\) 的杨表 \(t\) 满足(这个可以考虑 \(n + 0.5\) 的插入过程):

  • \(\forall 1\le i < B, t_{i, A} > t_{i + 1, A - 1}\)

注意:只对于最终得到的杨表 1,即 RSK 插入得到的杨表有这个限制,但对于另一个的限制只有形状相同!!!

我们考虑对于一个符合的杨表,直接按从小到大的数来确定它,具体而言:我们假设当前得到的是只考虑 \(1\sim i\) 的杨表,形状为 \(v\)(即每行分别有几列),加入 \(i + 1\),枚举加入在哪一行的末尾,得到一个新的杨表。

请注意:我们不是按照插入的顺序构造杨表,而是直接拓展原本的杨表!!!

只要一直加在轮廓线上就可以满足杨表的性质,同时我们要保证 \(n + 0.5\) 的限制(上文已经转化成对杨表的值的等价限制),那么只需要保证在加入 \((i, A)\) 的时候,\((i + 1, A - 1)\) 已经有值了即可。

code
(代码中的 A, B 应该是反过来的,但是这道题中杨表转置也不影响答案)

官方题解

官方题解

题目描述

给定整数 \(A\)\(B\)\(M\)

有多少种排列 \(P = (P_1, \dots, P_{AB-1})\) 满足以下所有条件?请将结果对 \(M\) 取模。

  • \(P\) 的最长递增子序列的长度为 \(A\)
  • \(P\) 的最长递减子序列的长度为 \(B\)
  • 存在一个整数 \(n\),将 \(n + 0.5\) 添加到 \(P\) 的末尾不会改变 \(P\) 的最长递增子序列和最长递减子序列的长度。

题解

本题是考察 Robinson–Schensted 对应的练习题。

关于 Robinson–Schensted 对应的解释,国际读者可参考 英文维基百科

在原题中,给定了最长递增子序列 (LIS) 和最长递减子序列 (LDS) 的长度,并且 \(P\) 的长度为 \((AB-1)\),因此 \(P\) 的标准杨表形状是唯一确定的。

具体来说,该形状为一个矩形,有 \(B\) 行和 \(A\) 列,右下角的方格被移除。设 \((i,j)\) 表示从上到下第 \(i\) 行、从左到右第 \(j\) 列的方格,\(t_{i,j}\) 表示写在方格 \((i,j)\) 上的数字。当前方格包含 \((1,1),\ldots,(1,A),(2,1),\ldots,(2,A),\ldots,(B,1),\ldots,(B,A-1)\),且满足 \(t_{i,j} < t_{i+1,j}\)\(t_{i,j} < t_{i,j+1}\)

考虑第三个条件。由于 LIS 和 LDS 长度不变,将 \((n+0.5)\) 添加到 \(P\) 末尾会生成一个形状为 \(B\times A\) 的杨表。设 \(t'_{i,j}\) 表示生成后的杨表中方格 \((i,j)\) 上的数字,需要满足:

  • \(t'_{1,A} = n + 0.5\)
  • \(t'_{i+1,A} = t_{i,A} \ (1 \leq i \leq B-1)\)

为了满足这些条件,原来的 \(t\) 必须满足:

  • \(t_{i,A} > t_{i+1,A-1} \ (1 \leq i \leq B-1)\)

综上所述,我们只需统计满足以下条件的 \(t\) 的数量:

  • \(t\) 包含从 \(1\)\((AB-1)\) 的所有整数,
  • \(t_{i,j} < t_{i+1,j}\)
  • \(t_{i,j} < t_{i,j+1}\)
  • \(t_{i+1,A-1} < t_{i,A}\)

在没有第四个条件的情况下,可以使用钩长公式轻松求解结果,但第四个条件会使得问题更复杂。

在本题中,给定的约束足够小,可以使用动态规划 (DP) 进行求解,其中 \(t\) 的值依次为 \(1, 2, \ldots, AB-1\) 填充。最多存在 500000 个状态,因此通过适当的实现可以快速运行。

思路解释

题目要求找到满足 LIS 和 LDS 长度要求的排列数量。由于 Robinson–Schensted 对应提供了一种将排列映射到杨表形状的方法,我们可以确定每种满足 LIS 和 LDS 长度的排列对应的杨表形状,并对该形状上的数字填充问题进行求解。通过动态规划和钩长公式,我们能够快速计算出满足条件的排列数量。

posted @ 2024-11-02 22:02  SkyMaths  阅读(225)  评论(0)    收藏  举报