1 条题解

  • 0
    @ 2025-10-17 21:26:21

    要解决这个问题,我们需要找到从初始字符串 SS 开始的第 KK合法标签(满足“最小循环表示唯一”的字符串),核心思路分为三部分:

    1. 最小循环表示的计算

    对于一个字符串,其“最小循环表示”是指所有循环移位(将字符串首尾相连后,从不同位置起始的子串)中字典序最小的那个子串。

    可以使用双指针法高效计算最小循环表示:

    • 设字符串为 ss,长度为 mm,初始化指针 i=0i=0j=1j=1,偏移量 k=0k=0
    • 比较 s[(i+k)%m]s[(i+k) \% m]s[(j+k)%m]s[(j+k) \% m]
      • 若相等,kk11,继续比较下一个字符;
      • s[(i+k)%m]>s[(j+k)%m]s[(i+k) \% m] > s[(j+k) \% m],则 i=max(i+k+1,j+1)i = \max(i+k+1, j+1)(跳过不可能成为最小起始的位置);
      • s[(i+k)%m]<s[(j+k)%m]s[(i+k) \% m] < s[(j+k) \% m],则 j=max(j+k+1,i+1)j = \max(j+k+1, i+1)
    • 重复直到 kmk \geq mimi \geq mjmj \geq m,最终 min(i,j)\min(i, j) 即为最小循环表示的起始位置。

    2. 最小循环表示的唯一性判断

    合法标签要求“最小循环表示唯一”——即只有一个起始位置能得到该最小循环表示。

    判断方法:

    • 先计算出最小循环表示的起始位置 pospos
    • 遍历所有其他可能的起始位置 tttpost \neq pos),检查循环移位后的子串是否等于最小循环表示;
    • 若存在某个 tt 满足条件,则最小循环表示不唯一,该字符串不合法。

    3. 字典序遍历与合法标签统计

    需要从初始字符串 SS 开始,按字典序递增的顺序生成所有可能的字符串(长度不超过 NN),并筛选出合法标签,直到找到第 KK 个:

    • 生成字典序字符串:类似“字典序回溯”,从 SS 出发,逐步生成后续字符串(如长度不足 NN 时,在末尾添加字符;长度足够时,按字符递增调整,如 aabaac → ... → aazab → ...)。
    • 合法筛选与计数:对每个生成的字符串,计算其最小循环表示并判断唯一性。若合法,则计数加 11;当计数达到 KK 时,当前字符串即为答案。
    • 边界处理:若遍历完所有可能的字符串(字典序不超过全 z 的字符串)后,合法标签数量不足 KK,输出 1-1

    通过这三个步骤,即可确定从 SS 开始的第 KK 个合法标签(或判断不存在)。

    • 1

    信息

    ID
    3202
    时间
    1000ms
    内存
    512MiB
    难度
    9
    标签
    递交数
    25
    已通过
    2
    上传者