Codeforces 1163 DMysterious Code
Posted denverjin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1163 DMysterious Code相关的知识,希望对你有一定的参考价值。
题意:给一个带有通配符的字符串,以及两个匹配串,要求把这个字符串补全后第一个匹配串出现次数减去第二个出现次数最大。求这个差的最大值。
思路:首先肯定是构造AC自动机。
然后在第一个串结尾的节点处放上1,第二个串结尾处放上-1,就变成了把字符串跑遍之后每一次加上这个节点以及所有\(fail\)的值得到的和最大。
那么就是个在AC自动机上\(dp\)的题。
考虑\(dp(i,j)\)表示现在到了第\(i\)位,跑到了AC自动机的\(j\)号节点,然后转移:
如果这个位置不是通配符,那么就沿着应该走的那条边走过去,否则枚举走的那条边。
由于我们的AC自动机已经被扩充成了\(trie\)图,所以就可以很容易地转移。Orz zcysky
以上是关于Codeforces 1163 DMysterious Code的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #558 (Div. 2)-Cat Party (Hard Edition)-(前缀和 + 模拟)