【Codeforces 1129C】Morse Code

时间:2023-03-08 16:57:11
Codeforces 1129 C

题意:给一个0/1串,问它的每一个前缀中的每一个子串能解析成莫尔斯电码的串的种数。

思路:首先对于这个串构造后缀自动机,那么从起点走到每一个节点的每一条路径都代表了这个串的一个子串,所以考虑以后缀自动机上的节点作为dp的对象,即\(dp(i)\)表示考虑第i个节点所表示的子串们,能够解释成多少种串。

转移方程就考虑现在在u节点,\(dp(go(u,i))\)可以加上\(dp(u)\)的值。

求答案的时候需要注意。我们需要在插入字符的时候就将每一个节点所对应的前缀的第一次出现位置给记下来,然后对于每个节点它父亲肯定会在它出现的地方出现,所以就将标记上推到link。

然后对于每一个节点将这个节点的dp值加到它第一次出现的地方,然后输出的时候求个前缀和就可以了。