其他分享
首页 > 其他分享> > Kattis - nvwls (AC自动机last优化 + dp)

Kattis - nvwls (AC自动机last优化 + dp)

作者:互联网

题意

给出一个字典,每个单词去掉元音字母 A、E、I、O、U 之后形成一个新字典。

先给出一个只有辅音组成的串,用原字典中的单词还原该串,若存在多种还原方式,输出还原后元音字母数量最多的那种,若依旧多种,则任意输出。

传送门

思路

ac自动机fail树上跑dp的一眼套路题。

总结一下遇到的坑:

  1. 多个单词去掉元音字母之后形成的新单词相同。
  2. 若原单词只有辅音字母。
  3. dp过程中未保证完全还原辅音串。
  4. 特殊样例将 跳fail的过程卡成了 \(n^2\) 。

解决办法:

  1. 在字典树的结尾节点保存编号时,保存最大值。
  2. 将初值从 $0 $ 改为 \(-1\) 。
  3. dp数组初值同样改为 \(-1\),\(dp[0] = 0\) ,dp只能由非\(-1\)的状态转移。
  4. 对fail数组进行 last优化last[u] = len[fail[u]]? fail[u]: last[fail[u]];

last优化

普通方法将建图+匹配的复杂度成功优化为了

标签:AC,last,Kattis,int,maxn,fail,节点,dp
来源: https://www.cnblogs.com/acerkoo/p/11670791.html