HDU 3065 病毒侵袭持续中
2016-05-19 20:15
267 查看
和hdu2222类似,一样的开个数组标记下出现次数就好,代码如下
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<algorithm> #include<queue> using namespace std; char a[1010][55]; struct Tree { int next[500010][128],fail[500010],end[500010]; 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 *s,int idx) { int len=strlen(s); int p=root; for(int i=0;i<len;i++) { int id=s[i]; if(next[p][id]==-1) next[p][id]=newnode(); p=next[p][id]; } end[p]=idx; } void build() { queue<int>q; int p=root; fail[root]=root; for(int i=0;i<128;i++) { if(next[p][i]==-1) next[p][i]=root; else { fail[next[p][i]]=root; q.push(next[p][i]); } } while(!q.empty()) { p=q.front(); q.pop(); for(int i=0;i<128;i++) { if(next[p][i]==-1) { next[p][i]=next[fail[p]][i]; } else { fail[next[p][i]]=next[fail[p]][i]; q.push(next[p][i]); } } } } int used[1010]; void query(char *s,int n) { int len=strlen(s); int p=root; bool flag=false; memset(used,0,sizeof(used)); for(int i=0;i<len;i++) { int id=s[i]; p=next[p][id]; int temp=p; while(temp!=root) { if(end[temp]!=-1) { used[end[temp]]++; flag=true; } temp=fail[temp]; } } for(int i=1;i<=n;i++) if(used[i]) printf("%s: %d\n",a[i],used[i]); } 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<26;j++) printf("%2d",next[i][j]); printf("]\n"); } } }; char str[2000010]; Tree ac; int main() { int n,m; while(~scanf("%d",&n)) { ac.init(); for(int i=1;i<=n;i++) { scanf("%s",a[i]); ac.insert(a[i],i); } ac.build(); scanf("%s",str); ac.query(str,n); } }
相关文章推荐
- maven项目 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Android集成支付宝支付功能
- C
- JSON解析 Gson的使用
- java中Array/List/Map/Object与Json互相转换详解
- 字符串的编辑距离
- JSON-RPC轻量级远程调用协议介绍及使用
- floor()向下取整函数
- 约瑟夫环问题
- Android客户端实现七牛云存储文件上传
- 见的如T、E、K、V等形式的参数常用于表示泛型形参
- 剑指Offer 旋转数组的最小数字
- 45. Jump Game II
- Activity中的四种启动模式
- POJ 2187 Beauty Contest(旋转卡壳模板题)
- jQuery入门(3) 设置DOM属性与获取DOM属性
- 模式匹配算法(BF)
- Smart210学习记录------nor flash驱动
- 使用VS开发人员命令提示符查看C++虚函数表及类内存分布
- ItemTouchHelper 使用RecyclerView打造可拖拽的GridView