HDU2896-AC自动机
来源:互联网 发布:万华写频软件 编辑:程序博客网 时间:2024/06/07 14:40
*直接AC自动机模板然后搜索每一个子串中的失配位置里面有没有是某个之前输入字符串的结尾有就加入进去并且在字符串的结尾标记上是第几个字符如果不是结尾就标记为0
题目链接
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<set>#define mes(s) memset(s,0,sizeof(s))#define rec(i,a,n) for(i = a; i <= n; i++)#define dec(i,a,n) for(i = n; i >= a; i--)using namespace std;const int mx = 1e5+10;set<int>st;struct trie{ int ch[mx][128]; int v[mx]; int f[mx]; int last[mx]; int sz; void init() {sz = 1,mes(ch[0]),mes(v),mes(v),mes(last);} int idx(char c) { return c;} void insert(int id,char *s){ int len = strlen(s)-1; int u = 0,i; rec(i,0,len){ int d = idx(s[i]); if(!ch[u][d]){ mes(ch[sz]); ch[u][d] = sz++; } u = ch[u][d]; } v[u] = id; } void getfail(){ int i,d,u; queue<int>q; rec(i,0,127){ if(!ch[0][i]) ch[0][i] = 0; else{ f[ch[0][i]] = 0; last[ch[0][i]] = 0; q.push(ch[0][i]); } } while(!q.empty()){ u = q.front(); q.pop(); rec(d,0,127){ if(!ch[u][d]){ ch[u][d] = ch[f[u]][d]; continue; } f[ch[u][d]] = ch[f[u]][d]; last[ch[u][d]] = v[f[ch[u][d]]]?f[ch[u][d]]:last[f[ch[u][d]]]; q.push(ch[u][d]); } } } void find(char *s){ int i,u = 0,len = strlen(s)-1; rec(i,0,len){ int d = idx(s[i]); int ret = ch[u][d]; while(ret){ if(v[ret]) st.insert(v[ret]); ret = last[ret]; } u = ch[u][d]; } }}word;char s[mx];int main(){ int n,m; int i,j,k; while(~scanf("%d",&n)){ word.init(); getchar(); rec(i,1,n){ gets(s); word.insert(i,s); } word.getfail(); scanf("%d",&m); getchar(); int ans = 0; rec(i,1,m){ gets(s); st.clear(); word.find(s); if(st.size()){ ans++; printf("web %d:",i); for(auto it = st.begin(); it != st.end(); it++) printf(" %d",*it); puts(""); } } printf("total: %d\n",ans); } return 0;}
阅读全文
0 0
- hdu2896 AC自动机
- hdu2896 AC自动机
- hdu2896之AC自动机
- hdu2896(ac自动机)
- hdu2896 AC自动机
- hdu2896 ac自动机
- hdu2896 & hdu3065 ac自动机
- hdu2896 AC自动机
- hdu2896-ac自动机
- hdu2896(AC自动机)
- hdu2896 AC自动机
- HDU2896【AC自动机-模板】
- HDU2896 AC自动机
- HDU2896-AC自动机
- 【AC自动机】 hdu2896 病毒侵袭
- 【hdu2896】【AC自动机】病毒侵袭
- HDU2896(病毒侵袭--AC自动机)
- hdu2896(AC自动机模板)
- css实现垂直水平居中
- 我所理解的ArrayList
- Android Studio 上传 Library 至 Jcenter 生成依赖的两种方式(菜鸟级教程)
- Linux网络常用命令之ifconfig
- 二维码打印机的例子
- HDU2896-AC自动机
- POJ3641 UVA11287 HDU1905 Pseudoprime numbers【素数判定+快速模幂】
- 排序算法——快速排序
- 成为Java顶尖程序员 ,看这10本书就够了
- Clang Diagnostics
- 嵌套的DIV水平垂直居中
- 机器学习 核函数
- PAT-A-1020. Tree Traversals (25)
- NYOJ-82迷宫寻宝(门与钥匙经典+搜索)