Day-6

字符串

  • 难点:理解算法过程

  • 二分 + 哈希 可以 $O(n log n) $ 完成 Manacher 和 exKMP

Manacher

P5446

  • R 是 S 的一个前缀
  • R[1, i] 的后缀的最大回文半径为 r
    • 一次翻折:i + r == n 成立
    • 多次翻折:目标串合法 且 目标串是一个回文串
  • 题解2

exKMP

  • \(z[i]\) 表示 \(S\)\(S[i, n]\) 的最长公共前缀
  • 流程:见视频

P7114

  • 固定 AB 的长度, 随着 i 增加, F(C) 只有两种情况

    1. C 的前缀中有 2n 个 AB, F(C) = F(i, n)
    2. C 的前缀中有 2n + 1 个 AB, F(C) = F(1, n)
  • 题解1具体实现?

  • 题解3

KMP

  • next 数组:最长的【后缀 == 前缀】的长度

    image-20240220094835834

P3435

  • 最长周期 = i - 最小 next
  • 画图理解

P2375

  • num :长度 <= $ \frac{i}{2} $​ 的 next 的个数
  • 重看 (题解1已掌握)

P5829 失配树

  • i <- next[i] 的关系构成的树

  • 为什么是一棵树

    • i > next[i]
  • Lca

HDU 7138

  • 条件1:[1, x] 是 S 的 border
  • 条件2:长度 > i / 2, \(len[i - x + 1, x] = 2x - i\)
    • \(2x 和 i 关于 k 同余\)
  • 建失配树,条件 1 自然满足
  • 条件 2 在树上Dfs

KMP自动机

  • 自动机:为给他一个字符串,他能实现一个功能
  • 构建(PPT)
  • 代码:
image-20240220111454660

Trie

P2922

  • 关系
    • S 是 T 的前缀
    • T 是 S 的前缀
  • 字典树

AC自动机

P5357

P2414

P3041

P2444

  • 以上重看

选讲

P5329

  • 通用方法
  • 如果能 \(O(1)\) 判断 si, sj的大小, 就可以重载比较函数, sort
  • 设 i < j, k = Lcp
    • 转化为 s[i + k + 1] 和 s[j + k] 的大小关系
  • ???

ICPC

  • 暴力:\(n^3\) DP
  • 状态2维, 转移
  • ???

P3426

二分一个前缀作为印章

O(n) Check (好像没法O(n) ?)

  • f(i) 为印出前缀 i 的最小印章长度

  • 印章既是前缀,又是后缀(类似border)

  • 中间不确定

  • 两个结论

    • f(i) = i 或 next(i) (??不能是next[next[i]]?)
  • ???重看

posted @ 2024-02-21 22:01  Bubble_e  阅读(1)  评论(0编辑  收藏  举报