HDU 5880 AC自动机
来源:互联网 发布:盈建科软件 编辑:程序博客网 时间:2024/06/01 07:55
http://acm.hdu.edu.cn/showproblem.php?pid=5880
AC自动机模板题,唯一不同的地方就是多一个长度数组,记录该状态为结尾状态时整个串的长度
之后当前状态进入到终结状态时 把这一段全部改变为*即可
#include <bits/stdc++.h>#define mme(i,j) memset(i,j,sizeof(i))#define maxs 2202020using namespace std;char s[maxs];class Ac_automatic{public: int nexts[maxs][26],ends[maxs],fail[maxs],les[maxs]; int root,L,bk[maxs]; int newnode() { for(int i=0;i<26;i++) nexts[L][i]=-1; les[L]=0; ends[L++]=-1; return L-1; } void init() { L = 0; root = newnode(); } void Insert(char *s) { int len=strlen(s); int id,now = root; for(int i=0;i<len;i++) { id = s[i]-'a'; if(nexts[now][id]==-1) nexts[now][id]=newnode(); now = nexts[now][id]; } ends[now]=1; les[now] = len; } void build() { int now = root ,id; queue<int>q; fail[root]=root; for(int i=0;i<26;i++) if(nexts[now][i]==-1) nexts[now][i]=root; else { fail[ nexts[root][i] ] = root; q.push(nexts[root][i]); } while(!q.empty()) { now = q.front(); q.pop(); for(int i=0;i<26;i++) { if(nexts[now][i]==-1) nexts[now][i] = nexts[ fail[now]][i]; else{ fail[ nexts[now][i] ] = nexts[ fail[now] ][i]; q.push(nexts[now][i]); } } } } void query(char *s) { int id; int len=strlen(s); int now =root; mme(bk,0); for(int i=0;i<len;i++) { if(s[i]>='A'&&s[i]<='Z') id = s[i]-'A'; else if(s[i]>='a'&&s[i]<='z') id = s[i]-'a'; else continue; now = nexts[now][id]; int tmp = now; while(tmp!=root) { if(ends[tmp]!= -1) { for(int j=i;j>=i-les[tmp]+1;j--) { s[j]='*'; } break; } tmp = fail[tmp]; } } puts(s); }}ac;char str[maxs];int main(){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); ac.init(); for(int i=0;i<n;i++) { scanf("%s",str); ac.Insert(str); } ac.build(); getchar(); gets(s); ac.query(s); } return 0;}
0 0
- HDU 5880 AC自动机
- hdu 5880 AC自动机
- HDU 5880 AC自动机
- 【HDU 5880】Family View(AC自动机)
- HDU 5880 Family View(AC自动机)
- hdu 5880 Family View AC自动机
- HDU 5880 Family View AC自动机
- [HDU 5880] Family View (AC自动机)
- HDU 5880 Family View (AC自动机)
- hdu-5880 AC自动机 + 差分优化
- 【Ac自动机】hdu 5880 Family View
- Hdu 5880 Family View AC自动机 水
- AC自动机 hdu 2222
- HDU 2222(AC 自动机)
- hdu 2222 AC自动机
- hdu 3065(AC自动机)
- HDU 2222 AC自动机
- HDU 2896 AC自动机
- [计算机视觉][神经网络与深度学习]SSD安装及其训练教程
- Java中的goto与break
- POJ 1151 Atlantis 笔记
- Python turtle 库 画图 彩色螺旋线五角星太阳花
- 2118 sdut
- HDU 5880 AC自动机
- 部署ecshop之一
- hadoop-2.6.0下hive-1.2.2安装与配置
- Oracle基本操作八:PL/SQL特殊数据类型%type %rowtype VARRAY TABLE RECORD
- [计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2
- 会场安排问题
- Android ActionBar应用实战,高仿微信主界面的设计
- Hihocoder 1514
- 实验吧——WriteUp&&涨姿势(2)