CSP-CCF2020(第20次) 第五题 解密密码本 题解(AC自动机+字典树+DP)

题意:

给n个单词,要你构造长度为k的密文,使得密文解密后是由这n个单词构成的
解密书,有k页,一开始在第1页,每页26行。第i行一个字符a和一个数字b表示密文i解码后变成a,并翻到第b页
并且构造的密文中的子串不能出现给出的单词。
问k=1,2,3…m时候的方案数
n <= 50, 单词总长度 <= 50, m <= 2000
给出的单词不会出现重复,也不会有一个是另一个的前缀。单词可以重复在明文中出现。

解题思路:

看一下限制条件:

  1. 长度要为k
  2. 密文中不可以出现任何子串为某个单词
  3. 明文是由给出的单词构成
  4. 密码书翻到的页数不同,密文对应的明文不同

对于第二个限制,相当于建立一棵AC自动机之后,拿密文在AC自动机上跑,不会跑到某个后缀为给出的单词的结点上去。

对于第三个限制,相当于用解密出来的明文在字典树上跑,每次跑的都是字典树上存在的边,并且走到某个单词的结尾就跳回根,最终停留在根上。

看到单词总长度<=50,意味着建树之后结点数不会超过50,所以用:
d p ( i , j , k , l ) dp(i,j,k,l) dp(i,j,k

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值