bzoj1559
自动机上状压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的更多相关文章
- 【BZOJ1559】[JSOI2009]密码(AC自动机,动态规划,搜索)
[BZOJ1559][JSOI2009]密码(AC自动机,动态规划,搜索) 题面 BZOJ 洛谷 题解 首先求方案数显然是构建\(AC\)自动机之后再状压\(dp\),似乎没有什么好讲的. 现在考虑答 ...
- [BZOJ1559][JSOI2009]密码(AC自动机)
http://www.lydsy.com/JudgeOnline/problem.php?id=1559 2009年的省选题虽然比起现在简单了不少,但对我来说还是很有挑战性的. 首先对于这种多串匹配问 ...
- BZOJ1559 [JSOI2009]密码 【AC自动机 + 状压dp】
题目链接 BZOJ1559 题解 考虑到这是一个包含子串的问题,而且子串非常少,我们考虑\(AC\)自动机上的状压\(dp\) 设\(f[i][j][s]\)表示长度为\(i\)的串,匹配到了\(AC ...
- bzoj1559 [JSOI2009]密码
题目链接:[JSOI2009]密码 我们先看第一问:输出方案数 我们把所有给出来的串丢到AC自动机里面去,然后在建出来的\(trie\)图上跑dp 由于\(n\leq 10\)我们很自然的就想到了状压 ...
- BZOJ1559[JSOI2009]密码——AC自动机+DP+搜索
题目描述 输入 输出 样例输入 10 2 hello world 样例输出 2 helloworld worldhello 提示 这题算是一个套路题了,多个串求都包含它们的长为L的串的方案数. 显然是 ...
- [BZOJ1559]密码 AC自动机+状压
问题 K: [JSOI2009]密码 时间限制: 1 Sec 内存限制: 64 MB 题目描述 众所周知,密码在信息领域起到了不可估量的作用.对于普通的登陆口令,唯一的破解 方法就是暴力破解一逐个尝 ...
- [BZOJ1559]密码
数据范围特别小,考虑状压DP 因为要求给定的字符串在母串中出现,所以可以用AC自动机辅助DP 因为AC自动机不能处理模式串互相包含的情况,所以先把互相包含的串去掉(暴力就行,数据范围太小) 因为要状压 ...
- 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题) ...
随机推荐
- 对bigDecimal的一些探索
一般直接用简单的double等来做浮点计算可能会因为计算机的浮点运算机制出现一点问题,不符合生活中的计算常识,于是java就给我们包装了大数据类,bigdecimal用于处理浮点数据类.当然也有处理整 ...
- 《程序员的思维修炼》摘抄start:2014年9月27日19:27:07
程序员的思维修炼:摘抄:考虑到社会中各个相关团体的复杂交互影响和社会的持续变化,在我看来当前最重要的两项技能就是: ▪沟通能力: ▪学习和思考能力.软件行业正在逐步提高沟通能力.特别是敏捷方法(见注解 ...
- Library string type(2)——关于String的操作
关于string的定义,请参阅博文http://blog.csdn.net/larry233/article/details/51483827 string的操作 s.empty() //Return ...
- C++11中新特性之:unordered_map
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value. 不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的ha ...
- 网站开发常用jQuery插件总结(六)关键词说明插件cluetip
我们开发的网站,总有它一定的用途.如企业站用来宣传企业或展示产品,技术站用来分享自己的思路和经验.既然网站有了它的用途,那么就拥有了它本身的关键词(关键词说明网站的主要内容).例如企业站的关键词大部分 ...
- 基于smarty+medoo手搭php简单的框架
1.首先看一下搭建好的smarty目录(箭头位置是后新建的文件夹,也是框架结构的最终目录结构) 2.首先在根目录下新建index.php文件即入口文件,内容如下 <?phprequire_onc ...
- Laravel学习第一天(创建laravel项目、路由、视图、blade模板)
创建laravel项目 composer create-project laravel/laravel learnlv 4.1.* 查看帮助:composer create-project 使用 ...
- php url字符转义操作
遇到一段代码,从数据库里读出来带 \ 字符 需要转义成中文~ 用到url_decode(); //$info 为刚从数据库中读取的二维数组 foreach($info as $key1 => & ...
- 刷新dns
1.window:ipconfig /flushdns 2.linux sudo rcnscd restart
- POJ 2406 Power Strings 1961的简化版,kmp的next数组的应用
题目: http://poj.org/problem?id=2406 跟1961差不多,题解就不写了,一开始理解错题了,导致WA一次. #include <stdio.h> #includ ...