Problem E Passwords AC自动机+额外的限制条件+状态压缩dp
Source
SWERC'2016 Universidade do Porto
Gym - 101174E
My Solution
题意:给出n个由小写字母模式串,用大写字母、小写字母、十进制数字构造的长度为[A, B]的字符串,
且满足一下限制条件:1、必须有至少一个大写字母至少一个小写字母和一个数字。
2、不包含任一模式串(不区分大小写)。
3、对于o、i、e、s、t,在模式串时和0、1、3、5、7不区分。
求构造出的满足条件的字符串种数。
AC自动机+额外的限制条件+状态压缩dp
首先这题的原始版本是 给出n模式串,构造不含任一模式串的长度为m的字符串种类数 http://blog.csdn.net/prolightsfxjh/article/details/54729646。
然后这题添加1、用大小写+数字进行构造+不区分大小写。
2、 构造出的字符串有至少一个大写字母至少一个小写字母和一个数字。
3、对于o、i、e、s、t,在模式串时和0、1、3、5、7不区分。
对于第二个条件,可以直接添加一维dp[8] 来状态压缩。
对于第一个条件则转移的时候直接转移2次即可,//mod( dp[ac.ch[j][k]][i][w | 1] += dp[j][i-1][w] ); mod( dp[ac.ch[j][k]][i][w | 2] += dp[j][i-1][w] );
对于第三个条件则如果是o、i、e、s、t 则在不是危险节点的时候额外转移一次,//mod( dp[ac.ch[j][k]][i][w | 4] += dp[j][i-1][w] );
其它数字则不管当前节点是否为危险节点都进行转移。
答案就是 sigma{dp[0 ~ ac.sz][[A, B]]}
复杂度 O(max(A, B) * len* n * 8 * CHAR_SIZE) == 4.16e6
#include
#include
#include
#include
#include
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
共有 0 条评论