Description
有三个字符串\(A,B,C\),他们都由小写字母和问号组成,其中问号可以代表任意小写字母。
已知在字典序上有\(A<B<C\)(这里的小于是严格小于),求有多少种问号填充能满足条件。
多组数据,\(1\leq |A|,|B|,|C|\leq 10^6\)。
Solution
先考虑一个朴素的DP……\(d_{i, 0/1, 0/1}\)表示考虑前\(i\)位的话目前\(A\)是等于/小于\(B\),\(B\)是等于/小于\(C\)的方案数。转移的话考虑刷表,枚举三个串下一位都是啥,转移就行了。但是这个东西复杂度是\(26^3n\)的……会炸掉,考虑优化。
转移很麻烦,我们考虑来预处理那个转移……\(f_{i, j, k, 0/1/2, 0/1/2}\)表示三个字符\(i, j, k\)(可能有\(\text{?}\)或者\(\epsilon\)),要求\(i\)和\(j\)的关系是小于/等于/大于,\(j\)和\(k\)的关系是小于/等于/大于的方案数,这个东西随便暴力一下就能高效的预处理出来。这样转移就很快力,,,
Code
1 |
|