hihoCoder1646-Rikka-with-String-II
题意
给出 \(n\) 个 01串,但每个串可能有一些位置是空白。求在填上这些空白的每一个方案建出字典树大小之和。
\(n\le 20,\max\{ S_i \}\le 100\)
思路
考虑字典树大小,可以理解为 \(|\bigcup T_i|\),即每一个串单独建出字典树的并集。对于这种并集,和这个数据范围,可以考虑暴力容斥原理:
\[\left|\bigcup_{i=1}^n T_i\right|=\sum_{s\subset \{ 1, \ldots ,n \},s\neq \empty}(-1)^{|s|+1}\left| \bigcap_{j\in s}T_j \right|
\]
即我们枚举 \(s\),然后相当于求在 \(S_{i\in s}\) 中填所有的空白了之后的最大公共前缀之和。
考虑再枚举一下目前的长度这一列还有几种情况会在公共前缀之中。如果当前这一列既出现了 \(0\) 也出现了 \(1\),则一定不合法了。否则,对于全是空白的,有两种可以填,剩下的就只能全部填一个了。
复杂度 \(\mathcal{O}(2^n\max\{ |S_i|\})\)。

浙公网安备 33010602011771号