[HDU2896]病毒侵袭(AC自动机)
来源:互联网 发布:win7触摸屏校准软件 编辑:程序博客网 时间:2024/06/06 16:44
题目:
我是超链接
题解:
AC自动机模板题
代码:
#include <cstdio>#include <queue>#include <algorithm>#include <cstring>using namespace std;char st[10005];int tot=0,ch[100005][130],is_end[100005],fail[100005],ans[1005];bool vis[100005];void trie(int id){int i;scanf("%s",st);int l=strlen(st),now=0;for (i=0;i<l;i++){int x=st[i];if (!ch[now][x]) ch[now][x]=++tot;now=ch[now][x];}is_end[now]=id;}void sp(){int i;queue <int> q;for (i=0;i<=128;i++) if (ch[0][i]) q.push(ch[0][i]);while (!q.empty()){int now=q.front();q.pop();for (i=0;i<=128;i++){if (!ch[now][i]){ch[now][i]=ch[fail[now]][i];continue;}fail[ch[now][i]]=ch[fail[now]][i];q.push(ch[now][i]);}}}void ac(){int i;scanf("%s",st);int l=strlen(st),now=0; for (i=0;i<l;i++) { vis[now]=1; int x=st[i]; int y=ch[now][x]; while (y && !vis[y]) { vis[y]=1; if (is_end[y]) ans[++ans[0]]=is_end[y]; y=fail[y];}now=ch[now][x];}}int main(){int n,i,j,m;scanf("%d",&n);for (i=1;i<=n;i++) trie(i);sp();scanf("%d",&m);int tot=0;for (i=1;i<=m;i++){memset(ans,0,sizeof(ans));memset(vis,0,sizeof(vis));ac();if (ans[0]){printf("web %d:",i);sort(ans+1,ans+ans[0]+1); for (j=1;j<=ans[0];j++) printf(" %d",ans[j]); printf("\n"); tot++;}}printf("total: %d",tot);}
0 0
- hdu2896 病毒侵袭 (AC自动机)
- hdu2896 病毒侵袭 (AC自动机)
- HDU2896 病毒侵袭(AC自动机)
- [HDU2896]病毒侵袭(AC自动机)
- hdu2896(病毒侵袭)--AC自动机
- [HDU2896]病毒侵袭(AC自动机)
- HDU2896:病毒侵袭(AC自动机)
- 【AC自动机】 hdu2896 病毒侵袭
- 【hdu2896】【AC自动机】病毒侵袭
- HDU2896(病毒侵袭--AC自动机)
- HDU2896 病毒侵袭 AC自动机
- AC自动机 病毒侵袭 hdu2896
- hdu2896---病毒侵袭(AC自动机)
- HDU2896 病毒侵袭 AC自动机
- HDU2896 病毒侵袭【AC自动机】
- HDU2896-病毒侵袭 AC自动机
- HDU2896病毒侵袭 AC自动机
- 【AC自动机】HDU2896病毒侵袭
- iOS开源项目周报0316
- android之论setContentView(R.layout.activity_main)位置的重要性
- java执行windows、shell命令
- MognoDB3.4.2用户访问配置管理
- webstorm中Git的使用
- [HDU2896]病毒侵袭(AC自动机)
- junit源码分析
- java 实现 redis 入门demo
- 关于C语言中switch的第一个case上面写代码的愚蠢之举
- bootstrap table 分页例子
- 直方图均衡化
- 从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 概念简介
- 【Java】常用加密技术与代码研究总结
- HDFS性能测试及优化部署