1 条题解

  • 0
    @ 2025-10-14 16:08:49

    题目简析

    给定字符串 SS,要求构造一个字符串序列 (T0,T1,,Tl)(T_0, T_1, \dots, T_l),满足:

    1. T0T_0SS 的子串
    2. 1il\forall 1 \le i \le lTi=Ti1+1|T_i| = |T_{i-1}| + 1(长度递增 11
    3. 1il\forall 1 \le i \le l,存在 SS 的长度为 Ti+1|T_i|+1 的子串 SiS'_i,使得 SiS'_i 的前缀为 Ti1T_{i-1},后缀为 TiT_i

    求最大的 ll


    算法标签

    • 字符串
    • 后缀自动机
    • 动态规划
    • 图论建模
    • 最长路径问题

    核心条件分析

    条件 33 是本题的关键。考虑 Ti=Ti1+1|T_i| = |T_{i-1}| + 1,那么:

    • Ti1T_{i-1} 必须是 TiT_i 的前缀(因为长度差 11
    • 存在一个比 TiT_i11 的串 SiS'_i,以 Ti1T_{i-1} 开头,以 TiT_i 结尾

    这意味着 TiT_iTi1T_{i-1} 多一个字符 cc,即 Ti=Ti1+cT_i = T_{i-1} + c,并且 Ti1+cT_{i-1} + c 必须出现在 SS 的某个长度为 Ti+1|T_i|+1 的子串的末尾位置。


    问题转化

    我们可以将问题建模为在 SS 的所有子串上寻找最长链:

    • 节点:SS 的所有子串(包括空串)
    • 边:从 uuvv 有边当且仅当:
      1. v=u+cv = u + ccc 为某字符)
      2. 存在 SS 中一个长度为 v+1|v|+1 的子串,以 uu 为前缀,以 vv 为后缀

    那么问题转化为从空串 ϵ\epsilon 出发的最长路径长度。


    高效解法

    直接枚举所有子串不可行。我们需要利用字符串高级数据结构。

    关键观察:条件等价于在 SS 中,uuvv 必须出现在某个长度为 v+1|v|+1 的窗口中,且 uu 是前缀,vv 是后缀。这提示我们可以用后缀自动机(Suffix Automaton)来刻画所有子串的出现关系。

    在后缀自动机中:

    • 每个状态对应一组 endpos 集合相同的子串
    • 状态之间的转移对应在子串末尾添加字符
    • 从初始状态到某个状态的路径对应一个子串

    我们定义 dp[u]dp[u] 为从状态 uu 出发的最长链长度。转移为:

    dp[u]=maxucv(dp[v]+1)dp[u] = \max_{u \xrightarrow{c} v} (dp[v] + 1)

    其中 ucvu \xrightarrow{c} v 表示存在字符 cc 使得从状态 uucc 转移到状态 vv

    最终答案为 maxdp[u]\max dp[u]


    算法流程

    1. 构建 SS 的后缀自动机
    2. 按状态 lenlen 从大到小排序(拓扑序)
    3. 动态规划计算 dp[u]dp[u]
    4. 输出最大值

    时间复杂度

    • 预处理O(S)O(|S|) 构建后缀自动机
    • 动态规划O(S)O(|S|) 状态转移
    • 总复杂度O(S)O(|S|),适用于 S5×105|S| \le 5 \times 10^5 的数据范围

    样例验证

    S="abab"S = \text{"abab"} 为例:

    • 空串 \to "b"\texttt{"b"}(通过 "ab"\texttt{"ab"}
    • "b"\texttt{"b"} \to "ab"\texttt{"ab"}(通过 "bab"\texttt{"bab"}
    • "ab"\texttt{"ab"} \to "bab"\texttt{"bab"}(通过 "abab"\texttt{"abab"}

    链长为 33,与样例输出一致。


    总结

    本题通过将子串关系转化为后缀自动机中的状态转移,利用动态规划在线性时间内求解。核心在于理解条件 33 的本质是要求相邻子串在某个公共窗口中以特定位置关系出现,这恰好对应自动机中的字符转移关系。

    • 1

    信息

    ID
    3121
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者