1 条题解

  • 0
    @ 2026-9-3 10:27:44

    题解

    思路

    长度不超过 nn 的模式串在无限循环串 ttt⋯ttt\cdots 中出现,当且仅当它在 t+tt+t 中出现。直接枚举 tt 会产生指数复杂度;满分算法需要在构造第一份 tt 时,同时描述第二份 tt 在自动机上的行为。

    做法

    子任务 1:逐位置检查

    枚举 2n2^n 个候选串 tt,再枚举 ss 的起点,并逐字符按下标模 nn 比较。复杂度为 O(2nn∣s∣)O(2^n n|s|)。

    子任务 2:KMP 扫描

    仍枚举 tt,但对 t+tt+t 做一次 KMP 匹配,把每个候选串的检查降到 O(n+∣s∣)O(n+|s|)。总复杂度为 O(2n(n+∣s∣))O(2^n(n+|s|))。

    子任务 3:双自动机状态 DP

    为模式串 ss 建 KMP 自动机,状态 0,1,…,m0,1,\ldots,m 表示已经匹配的前缀长度,m=∣s∣m=|s| 是吸收态。

    枚举第一份 tt 从状态 00 读完后到达的状态 rr。固定 rr 后,令

    dpi,x,ydp_{i,x,y}

    表示已经确定 tt 的前 ii 位;第一台自动机从状态 00 出发到达 xx,第二台自动机从状态 rr 出发到达 yy 的方案数。初值为

    dp0,0,r=1.dp_{0,0,r}=1.

    枚举下一位字符 c∈{0,1}c\in\{0,1\},两台自动机同时沿 cc 转移。读完 nn 位后,只有第一台恰好到达所枚举的 rr,且第二台到达吸收态 mm 的方案才合法,因此把

    dpn,r,mdp_{n,r,m}

    加入答案。

    第一台处理第一份 tt,第二台从第一份结束状态继续处理同一个 tt,合起来恰好描述 t+tt+t;枚举 rr 后每个字符串只会进入唯一一组状态,不会重复计数。

    复杂度

    设 m=∣s∣m=|s|。满分算法时间复杂度为 O(nm3)O(nm^3),空间复杂度为 O(m2)O(m^2)。答案不超过 2402^{40},使用 64 位整数即可。

    • 1

    信息

    ID
    1203
    时间
    3000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者