[HDU2222]Keywords Search(AC自动机)
来源:互联网 发布:网络安全法与等级保护 编辑:程序博客网 时间:2024/06/06 02:37
点击打开链接
AC自动机模板
#include <cstdio>#include <queue>#include <cstring>#define N 10000*50+10using namespace std;char st[N],ss[1000005];int tot=0,ch[N][30],fail[N],is_end[N];bool visit[N];void trie(){int now=0,l=strlen(st);for (int i=0;i<l;i++) { int x=st[i]-'a'; if (!ch[now][x]) ch[now][x]=++tot; now=ch[now][x]; }is_end[now]++;}void sp(){int i;queue <int> q;for (i=0;i<26;i++) if (ch[0][i]) q.push(ch[0][i]);while (!q.empty()){int now=q.front(); q.pop();for (i=0;i<26;i++){if (!ch[now][i]){ch[now][i]=ch[fail[now]][i];continue;}int tmp=ch[now][i];fail[tmp]=ch[fail[now]][i];q.push(tmp);}}}void ac(){int i;int l=strlen(ss),now=0,ans=0;for (i=0;i<l;i++){visit[now]=1;int x=ss[i]-'a';int y=ch[now][x];while (y && !visit[y]) {visit[y]=true;ans+=is_end[y];y=fail[y];}now=ch[now][x];} printf("%d\n",ans); }int main(){int i,t,n;scanf("%d",&t);while (t--){tot=0;memset(ch,0,sizeof(ch));memset(visit,0,sizeof(visit));memset(is_end,0,sizeof(is_end)); memset(fail,0,sizeof(fail));scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%s",&st); trie();} sp();scanf("%s",&ss);ac(); }}
0 0
- hdu2222 Keywords Search (AC自动机)
- hdu2222 Keywords Search (AC自动机)
- [HDU2222]Keywords Search(AC自动机)
- HDU2222 Keywords Search(AC自动机)
- [HDU2222]Keywords Search(AC自动机)
- hdu2222:Keywords Search(AC自动机)
- HDU2222:Keywords Search(AC自动机)
- [AC自动机]hdu2222 Keywords Search
- HDU2222 Keywords Search AC自动机
- 【hdu2222】【AC自动机】Keywords Search
- HDU2222 Keywords Search AC自动机
- HDU2222 Keywords Search AC自动机
- [HDU2222] Keywords Search && AC自动机
- HDU2222 Keywords Search AC自动机
- HDU2222 Keywords Search【AC自动机】
- AC自动机 - hdu2222 Keywords Search
- HDU2222-Keywords Search AC自动机
- AC自动机 hdu2222 Keywords Search
- 第一个Spring Boot应用
- 平时程序中遇到的crash(一)
- Ubuntu 安装 SQL Server
- struts 单文件文件上传
- Oracle RAC学习笔记01-集群理论
- [HDU2222]Keywords Search(AC自动机)
- Select 语句执行顺序以及如何提高Oracle 基本查询效率
- Android获取栈顶Activity/查看应用使用情况(适配Android6.0)
- 使用Socket实现NIO通信
- C/C++/C#/Java/Python
- Linux kernel 的source code 官网
- [译] Alamofire Tutorial: Getting Started
- js时间相关操作
- web前端js实现倒计时效果