P3193题解

题目链接: P3193

一道很好的综合题目。

一、题意分析

简化题意:给定一个仅含数字的长度为 $M$ 的模式串,请用数字填充一个长度为$N$的空串,使得模式串无法与该串的任何子串匹配。

二、解法分析

1.爆搜

首先想到爆搜。用$10$种方案填$n$个空,是$O(10^n)$的复杂度,加上$O(n)$的判等,总复杂度是$O(n \cdot 10^n)$的。但是$n=10^9$...

爆炸

2. $\ \ dp$

题目中有两个串,容易想到定义$dp[i][j]$为在串中填了$i$位,符合与模式串的$j$位无法匹配的方案数。

那么$dp$的边界就很清楚了:依据定义, $dp[0][0]=1$ (空串与空串必然匹配啊)。

下来思考转移。显然这里的转移要由两个维度转移而来,可以想到要预处理出模式串中满足前$i$位的数转移到满足前$j$位的方案数。我们令这个方案数为$g[i][j]$。设$dp[i][j]$由$dp[i-1][k]$转移而来,那么显然$dp[i][j]+=dp[i-1][k] \times g[j][k]$ 。

显然这个 $g[i][j]$ 是恒定不变的,且$i<m,j<m$(不然怎么转移?)且只与模式串有关。而模式串的长度是$M\le20$,可以放心预处理。

那么怎么预处理呢?

思考一个问题:长度由$j$增加到$i$必然可以转移的条件是什么?

如果一个长度为$j$的串已经不匹配了,现在要转移到$i$处去,那只需要填上所有原来模式串的内容就可以了。但前提是填上的内容要在这个串里出现过(不然出现别的串,不满足了)。

听不懂?很正常。来,举个例子。设模式串为$12345612389$,如果前9位$3$处已经不匹配,那么后三位就可以直接

41dfd1ef-d9f5-47da-82ed-9fd3cbf4e65e
posted @ 2023-12-04 20:32  长安19路  阅读(21)  评论(0)    收藏  举报  来源