码迷,mamicode.com
首页 > 其他好文 > 详细

【Codeforces 1163 D】Mysterious Code

时间:2019-05-10 23:54:34      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:codeforce   位置   line   lin   补全   mys   ORC   inline   字符   

题意:给一个带有通配符的字符串,以及两个匹配串,要求把这个字符串补全后第一个匹配串出现次数减去第二个出现次数最大。求这个差的最大值。

思路:首先肯定是构造AC自动机。

然后在第一个串结尾的节点处放上1,第二个串结尾处放上-1,就变成了把字符串跑遍之后每一次加上这个节点以及所有\(fail\)的值得到的和最大。

那么就是个在AC自动机上\(dp\)的题。

考虑\(dp(i,j)\)表示现在到了第\(i\)位,跑到了AC自动机的\(j\)号节点,然后转移:

如果这个位置不是通配符,那么就沿着应该走的那条边走过去,否则枚举走的那条边。

由于我们的AC自动机已经被扩充成了\(trie\)图,所以就可以很容易地转移。Orz zcysky

【Codeforces 1163 D】Mysterious Code

标签:codeforce   位置   line   lin   补全   mys   ORC   inline   字符   

原文地址:https://www.cnblogs.com/denverjin/p/10847101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!