BZOJ1212: [HNOI2004]L语言 AC自动机
来源:互联网 发布:ubuntu切换root用户 编辑:程序博客网 时间:2024/05/29 06:39
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1212
把给定的单词建成一个AC自动机,然后把给的文章在上面跑即可。
f[i]表示能不能匹配到第i个字符,当第i个字符在AC自动机上走到了x节点,如果x是一个danger节点那么就一直跳x的fail指针,如果路径上有danger节点,f[i]|=f[i-w[x]] (其中w[x]表示:如果x为终止节点那么这个字符串的长度是多少)
#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int M=1000005;const int N=1005;int n,m,f[M],e[N][30],fail[N],cnt=1,w[N];char s[M],ch[30];bool danger[N];void insert(){scanf("%s",ch+1);int x=1;for(int i=1;ch[i];i++){int o=ch[i]-'a'+1;if(!e[x][o]) e[x][o]=++cnt;x=e[x][o];}w[x]=strlen(ch+1);danger[x]=true;}queue<int>Q;void build(){for(int i=1;i<=26;i++) e[0][i]=1;fail[1]=0;Q.push(1);while(!Q.empty()){int x=Q.front();Q.pop();for(int i=1;i<=26;i++){int v=e[x][i];if(v) fail[v]=e[fail[x]][i],Q.push(v);else e[x][i]=e[fail[x]][i];}danger[x]|=danger[fail[x]];}}void match(){int x=1;for(int i=1;s[i];i++){int o=s[i]-'a'+1;x=e[x][o];if(danger[x]){int y=x;while(y){if(w[y]) f[i]|=f[i-w[y]];y=fail[y];}}}}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) insert();build();while(m--){scanf("%s",s+1);int len=strlen(s+1);memset(f,0,sizeof(f));f[0]=1;match();for(int i=len;i>=0;i--)if(f[i]) {printf("%d\n",i);break;}}}
0 0
- BZOJ1212: [HNOI2004]L语言 AC自动机
- [DP+AC自动机] BZOJ1212: [HNOI2004]L语言
- [BZOJ1212][HNOI2004]L语言(AC自动机+dp)
- bzoj1212 [HNOI2004]L语言(AC+dp)
- bzoj1212: [HNOI2004]L语言
- 【BZOJ1212】【HNOI2004】L语言
- bzoj1212: [HNOI2004]L语言
- bzoj1212: [HNOI2004]L语言
- bzoj1212: [HNOI2004]L语言
- BZOJ 1212: [HNOI2004]L语言 AC自动机
- bzoj1212: [HNOI2004]L语言 Trie+dp
- 【BZOJ1212】[HNOI2004]L语言【Trie】【暴力】
- bzoj1212 [HNOI2004]L语言(Trie+暴力)
- [bzoj1212] [HNOI2004]L语言(trie+dp)
- [BZOJ1212]-[HNOI2004]L语言-trie+DP
- bzoj 1212: [HNOI2004]L语言(AC自动机+DP)
- BZOJ 1212 [HNOI2004] L语言 AC自动机+DP
- Bzoj 1212: [HNOI2004]L语言(AC自动机+DP)
- 细数云计算产品和技术-OpenStack
- 统一设备模型(四):sysfs文件系统的分析
- 15-CoreData删除所有数据之NSBatchDeleteRequest
- 2016蓝桥杯C/C++省赛 交换瓶子(超级大水题)
- Maven profile
- BZOJ1212: [HNOI2004]L语言 AC自动机
- 【笔试真题】2017年58春招笔试题
- 【CodeForces 765D】 Artsem and Saunders(数学,构造)
- Linux下创建,进入目录的权限,创建并显示普通文件的权限
- JZOJ 1533. 郁闷的gxg
- linux 键盘输入错乱
- android opengl es 3d 贴图 旋转立方体demo
- 对Java.io中一些类的归纳,层次结构图
- 设置eclipse行号