自动机上状压dp,把单词是否存在压成二进制位
注意这里面某些单词会包含其他单词,所以某些自动机上有些状态点对应多个二进制位
方案只要再顺着有方案的状态搜一遍即可

 var trie,go:array[..,'a'..'z'] of longint;
f,q,v:array[..] of longint;
ans:array[..] of string;
dp:array[..,..,..] of int64;
t,k,i,j,n,m,l:longint;
c:char;
s:string; function calc(n:longint):int64;
var i:longint;
begin
calc:=;
for i:= to n do
calc:=calc*;
end; procedure ac;
var h,r,x,y,j,i:longint;
c:char;
begin
h:=;
r:=;
for c:='a' to 'z' do
if trie[,c]> then
begin
inc(r);
q[r]:=trie[,c];
end; while h<=r do
begin
x:=q[h];
for c:='a' to 'z' do
if trie[x,c]> then
begin
y:=trie[x,c];
inc(r);
q[r]:=y;
j:=f[x];
while (j>) and (trie[j,c]=) do j:=f[j];
f[y]:=trie[j,c];
v[y]:=v[y] or v[trie[j,c]];
end;
inc(h);
end;
end; function dfs(i,p,q:longint):int64;
var c:char;
begin
if i=m then
begin
if q= shl n- then dp[i,p,q]:=
else dp[i,p,q]:=;
end;
if dp[i,p,q]<>- then exit(dp[i,p,q]);
if (q= shl n-) and (m-i<) then exit(calc(m-i));
dp[i,p,q]:=;
for c:='a' to 'z' do
dp[i,p,q]:=dp[i,p,q]+dfs(i+,go[p,c],q or v[go[p,c]]);
exit(dp[i,p,q]);
end; procedure get(i,p,q:longint);
var c:char;
j:longint;
begin
if i=m then
begin
inc(t);
ans[t]:=s;
end
else begin
for c:='a' to 'z' do
if dp[i+,go[p,c],q or v[go[p,c]]]> then
begin
s[i+]:=c;
get(i+,go[p,c],q or v[go[p,c]]);
end;
end;
end; begin
readln(m,n);
for i:= to n do
begin
j:=;
readln(s);
l:=length(s);
for k:= to l do
begin
if trie[j,s[k]]= then
begin
inc(t);
trie[j,s[k]]:=t;
end;
j:=trie[j,s[k]];
end;
v[j]:= shl (i-);
end;
ac;
for i:= to t do
for c:='a' to 'z' do
begin
j:=i;
while (j>) and (trie[j,c]=) do j:=f[j];
go[i,c]:=trie[j,c];
end; fillchar(dp,sizeof(dp),);
writeln(dfs(,,));
if dp[,,]<= then
begin
t:=;
s:='';
for i:= to m do
s:=s+' ';
get(,,);
for i:= to t do
writeln(ans[i]);
end;
end.

bzoj1559的更多相关文章

  1. 【BZOJ1559】[JSOI2009]密码(AC自动机,动态规划,搜索)

    [BZOJ1559][JSOI2009]密码(AC自动机,动态规划,搜索) 题面 BZOJ 洛谷 题解 首先求方案数显然是构建\(AC\)自动机之后再状压\(dp\),似乎没有什么好讲的. 现在考虑答 ...

  2. [BZOJ1559][JSOI2009]密码(AC自动机)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1559 2009年的省选题虽然比起现在简单了不少,但对我来说还是很有挑战性的. 首先对于这种多串匹配问 ...

  3. BZOJ1559 [JSOI2009]密码 【AC自动机 + 状压dp】

    题目链接 BZOJ1559 题解 考虑到这是一个包含子串的问题,而且子串非常少,我们考虑\(AC\)自动机上的状压\(dp\) 设\(f[i][j][s]\)表示长度为\(i\)的串,匹配到了\(AC ...

  4. bzoj1559 [JSOI2009]密码

    题目链接:[JSOI2009]密码 我们先看第一问:输出方案数 我们把所有给出来的串丢到AC自动机里面去,然后在建出来的\(trie\)图上跑dp 由于\(n\leq 10\)我们很自然的就想到了状压 ...

  5. BZOJ1559[JSOI2009]密码——AC自动机+DP+搜索

    题目描述 输入 输出 样例输入 10 2 hello world 样例输出 2 helloworld worldhello 提示 这题算是一个套路题了,多个串求都包含它们的长为L的串的方案数. 显然是 ...

  6. [BZOJ1559]密码 AC自动机+状压

    问题 K: [JSOI2009]密码 时间限制: 1 Sec  内存限制: 64 MB 题目描述 众所周知,密码在信息领域起到了不可估量的作用.对于普通的登陆口令,唯一的破解 方法就是暴力破解一逐个尝 ...

  7. [BZOJ1559]密码

    数据范围特别小,考虑状压DP 因为要求给定的字符串在母串中出现,所以可以用AC自动机辅助DP 因为AC自动机不能处理模式串互相包含的情况,所以先把互相包含的串去掉(暴力就行,数据范围太小) 因为要状压 ...

  8. AHOI2018训练日程(3.10~4.12)

    (总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) ...

随机推荐

  1. MVC小系列(六)【无刷新的验证码】

    做个无刷新的验证码功能: 第一步:首先,在公用项目中建立一个生成图片验证码的类型ValidateCode /// <summary> /// 生成验证码对象 /// </summar ...

  2. (一)初识Android

    第一节:手机操作系统简介 目前的主流智能操作系统有:Android , IOS , windows mobile ; Android 开源,属于谷歌公司,市场份额较大,前景广阔: IOS 属于苹果公司 ...

  3. Code::Blocks开发中的字符串编码错误

    刚开始使用Code::Blocks开发Windows中文应用程序的朋友们,如果在代码中使用了中文字符串,编译时可能遇到过Illegal byte sequence或Failure to convert ...

  4. OC 知识点回顾

    /* 字符串: NSString  不可变字符串  字符串对象的内容不能修改,字符串的指针可以改变 NSMutableString 可变字符串   可以修改字符串对象的内容,继承自NSString , ...

  5. Objective-C description的用法

    description类似于.net/java ToString()方法的用途. 假设有一个CTPerson类, - (NSString *)description { return @"d ...

  6. xcode插件安装完之后无法使用问题解决

    1.打开xcode插件所在的目录: 例如: ~/wangdi/library/Application Support/Developer/Shared/Xcode/Plug-ins /Users/su ...

  7. c语言全局变量与局部变量(当变量重名时)的使用情况

    在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等.不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的.这样的做法 ...

  8. Unity中使用RequireComponent,没有添加上组件

    using UnityEngine; using System.Collections; [RequireComponent(typeof(MeshFilter), typeof(MeshRender ...

  9. Java文件操作 读写操作

    一.Java读取文件 案例1:读取D盘的1.txt文件 编码: File file = new File("D:/1.txt"); FileReader fr = new File ...

  10. tr设置border无效的解决方法

    给table的css添加属性:border-collapse: collapse; 边框不折叠的表格 行,列,行组是不具有border的