zoukankan      html  css  js  c++  java
  • 子序列自动机

    OI Wiki

    子序列自动机的每个状态表示当前位置结尾的字符串中第一次出现的字符串。状态数 (n+1) ,转移数 (O(n imes sum)),其中 (n) 为字符串长度,(sum) 为字符集大小。

    应用

    • 判断一个字符串是否是另一个字符串的子序列

      对第二个序列建立子序列自动机,拿第一个串在上面跑,如果顺利跑完就说明是子序列。

    • 求一个字符串的本质不同子序列个数

      建立子序列自动机,我们发现任何一个子序列在自动机上跑,最后停下的位置一定是它第一次出现的位置,并且子序列自动机上的每条路径是且仅是这个字符串的一个子序列。所以答案就是这个自动机上从初始节点开始的路径个数。在 DAG 上拓扑排序+DP即可。

    例题

    1. luogu P5826 【模板】子序列自动机 题解
    2. CF1383E Strange Operation 题解
    由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
  • 相关阅读:
    单词接龙
    字符串,字符数组
    马的遍历
    约瑟夫问题
    扫雷游戏
    寻找道路
    传纸条
    数的划分
    火柴棒等式
    火星人
  • 原文地址:https://www.cnblogs.com/With-penguin/p/13404614.html
Copyright © 2011-2022 走看看