AC 自动机 HDU 2896
来源:互联网 发布:非洲知乎 编辑:程序博客网 时间:2024/06/05 17:26
自动机水题,注意输出的是web的编号不一定连续以及别忘了输出冒号
#include <bits/stdc++.h>using namespace std;int ans[505],n,m,sum;char buf[10010],str[505][205];struct Trie{ int next[505*205][128],fail[505*205],end[505*205]; int root,L; int newnode() { for(int i = 0;i < 128;i++) next[L][i] = -1; end[L++] = -1; return L-1; } void init() { L = 0; root = newnode(); } void insert(char buf[],int id) { int len = strlen(buf); int now = root; for(int i = 0;i < len;i++) { if(next[now][buf[i]-0] == -1) next[now][buf[i]-0] = newnode(); now = next[now][buf[i]-0]; } end[now]=id; } void build() { queue<int>Q; fail[root] = root; for(int i = 0;i < 128;i++) if(next[root][i] == -1) next[root][i] = root; else { fail[next[root][i]] = root; Q.push(next[root][i]); } while( !Q.empty() ) { int now = Q.front(); Q.pop(); for(int i = 0;i < 128;i++) if(next[now][i] == -1) next[now][i] = next[fail[now]][i]; else { fail[next[now][i]]=next[fail[now]][i]; Q.push(next[now][i]); } } } void query(char buf[],int id) { int len = strlen(buf); int now = root; for(int i = 0;i < len;i++) { now = next[now][buf[i]-0]; int temp = now; while( temp != root ) { ans[end[temp]]++; temp = fail[temp]; } } int x = 0; for(int i=0;i<n;i++) x += ans[i]; if(x) { printf("web %d:",id); for(int i=0;i<n;i++) if(ans[i]) printf(" %d",i+1); printf("\n"); sum++; } } void debug() { for(int i = 0;i < L;i++) { printf("id = %3d,fail = %3d,end = %3d,chi = [",i,fail[i],end[i]); for(int j = 0;j < 128;j++) printf("%2d",next[i][j]); printf("]\n"); } }}ac;int main(){ while(~scanf("%d",&n)) { ac.init();sum=0; for(int i = 0;i < n;i++) { scanf("%s",str[i]); ac.insert(str[i],i); } ac.build(); scanf("%d",&m); for(int i=0;i<m;i++) { memset(ans,0,sizeof(ans)); scanf("%s",buf); ac.query(buf,i+1); } printf("total: %d\n",sum); } return 0;}
0 0
- HDU 2896 AC自动机
- HDU 2896 AC自动机
- hdu 2896 ac自动机
- HDU 2896 AC自动机
- HDU 2896 AC自动机
- HDU 2896 AC自动机
- hdu 2896 AC自动机
- hdu 2896 ac自动机
- hdu 2896(ac自动机)
- HDU 2896 AC自动机
- AC 自动机 HDU 2896
- HDU 2896 (AC自动机)
- hdu 2896AC自动机
- HDU 2896 AC自动机
- hdu 2896 ac自动机
- HDU-2896-AC自动机
- AC自动机 模板 hdu 2896
- HDU 2896 AC自动机 裸题
- 巧用ViewPager 打造不一样的广告轮播切换效果
- 蓝牙开发初步认识
- NandFlash和iNand
- Nginx 概述及日常管理
- 一个成功男人30岁前应该完成的那些事情
- AC 自动机 HDU 2896
- docker - 从安装到部署一个web应用(go、java)
- Spring 如何读取properties文件内容
- SQL查询语句
- 数据库-封锁(locking)
- 单例模式将配置文件加载在jvm内存,修改配置文件,可调用reload方法重新加载至内存
- 制作centos6.5 镜像,安装cloud-init 支持openstack 密码注入
- HDU,1232,畅通工程
- 将color转为UIImage