HDU 5880 Family View(AC自动机)
来源:互联网 发布:php 输出等边三角形 编辑:程序博客网 时间:2024/06/09 18:55
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int maxn=1000000+100;char p[maxn];int nxt[maxn][26],l[maxn],badnode[maxn],pre[maxn],vis[maxn];int L,root;int newnode(){ for(int i=0;i<26;i++) nxt[L][i]=-1; l[L]=0; badnode[L++]=-1; return L-1;}void intial(){ L=0; root=newnode();}void Insert(char *ss){ int now=root; int len=(int)strlen(ss); for(int i=0;i<len;i++) { int idx=ss[i]-'a'; if(nxt[now][idx]==-1) nxt[now][idx]=newnode(); now=nxt[now][idx]; } badnode[now]=1; l[now]=len;}void BuildDFA(){ queue<int> q; pre[root]=root; for(int i=0;i<26;i++){ if(nxt[root][i]==-1) nxt[root][i]=root; else{ pre[nxt[root][i]]=root; q.push(nxt[root][i]); } } while(!q.empty()) { int now=q.front();q.pop(); for(int i=0;i<26;i++) { if(nxt[now][i]==-1) nxt[now][i]=nxt[pre[now]][i]; else{ pre[nxt[now][i]]=nxt[pre[now]][i]; q.push(nxt[now][i]); } } }}void work(){ memset(vis,0,sizeof(vis)); int now=root; int len=(int)strlen(p); for(int i=0;i<len;i++) { int idx=0; if(p[i]>='A'&&p[i]<='Z') idx=p[i]-'A'; else if(p[i]>='a'&&p[i]<='z') idx=p[i]-'a'; else continue; now=nxt[now][idx]; int cur=now; while(cur!=root) { if(badnode[cur]!=-1) { vis[i+1]--; vis[i-l[cur]+1]++; break; } cur=pre[cur]; } } long long ans=0; for(int i=0;i<len;i++) { ans+=vis[i]; if(ans>0) printf("*"); else printf("%c",p[i]); } printf("\n");}int main(){ int t,n; scanf("%d",&t); while(t--) { intial(); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",p); Insert(p); } BuildDFA(); getchar(); gets(p); work(); } return 0;}
0 0
- 【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自动机)
- 【Ac自动机】hdu 5880 Family View
- Hdu 5880 Family View AC自动机 水
- HDU 5880 Family View 好容易MLE的AC自动机 *
- 【HDU5880】Family View(AC自动机)
- hdu 5880 Family View ac自动机屏蔽文章关键词 2016青岛网赛
- 【hdu 5880】 【AC自动机+差分法】Family View 把匹配到的敏感词改成*
- HDU5880 Family View(AC自动机)
- hdu5880 Family View (AC自动机)
- HDU 5880 Family View
- hdu 5880 Family View
- HDU 5880 Family View
- HDU 5880 AC自动机
- poj1651 区间dp
- 解决输入法软键盘上顶RadioGroup实现的底部菜单栏问题
- 剑指offer面试题30:最小的K个数
- URL乱码-待续
- wireshark 过滤语法总结
- HDU 5880 Family View(AC自动机)
- 思维跳跃
- 虚拟机linux中装mysql数据库
- Find The Multiple
- 电路设计_路由器方案比较
- HDU 5882 Balanced Game(水题)
- js Array
- poj3252 数位dp
- Opencv Surf算子特征提取与最优匹配