1 条题解
-
5
Trie
题意:给定 个 01? 串,串中仅含
0、1、?,将?替换成0、1中的一个。计算此时的 Trie 树的点数之和。题目已经令 表示?个数了。观察到 小,有人云:
状压DP、暴力搜索、指数容斥。
显然,我们考虑 DP,旁边的容斥。
不难发现,当确定了字符串时,Trie 树的节点个数是本质不同前缀个数 + 1。
于是,我们枚举前缀,计算他在这 个字符串中出现的情况数。这是如果我们枚举了一个下标集合 ,有贡献 , 表示这个前缀能否出现在我们枚举的下标集合对应的字符串,如果能,那么考虑全局的方案数
然而,这非常 LZ,考虑优化,由于每个前缀的权值都是 ,故可以枚举集合与前缀长度,判断这个集合有多少个可能均能够出现相同的前缀。注意这是迁全局的,要考虑不在下标集的字符串的贡献。
在已知字符串下标集合的条件下,我们枚举前缀。前缀的长度不超过集合中任何字符串的长度。
令 表示集合外的
?个数, 是比枚举到的前缀小(不严格)的前缀,全是?的个数。设前缀长度为 ,原串是 。
有以下情况:
-
,此时有贡献 。加贡献之前 。其中 表示 后面列的问号数。
-
且 ,不做贡献并马上退出。
-
否则,。
如果用 Gray-code 的枚举方法,复杂度正确 。
但是 ,可以过本题。事实上,通过全部问号的数据可以 HACK 之。
-
- 1
信息
- ID
- 2794
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 6
- 已通过
- 4
- 上传者