[Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]
AC自动机模板题(膜jcvb代码)

1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cmath> 7 #include <ctime> 8 #include <queue> 9 10 using namespace std; 11 12 char s[110000],tt[110000],Ans[110000]; 13 int ch[110000][26],Fail[110000],lab[110000],cnt,nv[110000]; 14 15 void Add(const char * str) 16 { 17 int p=0,i; 18 for(i=1;str[i];++i) 19 { 20 if(!ch[p][str[i]-97])ch[p][str[i]-97]=++cnt; 21 p=ch[p][str[i]-97]; 22 } 23 lab[p]=i-1; 24 return ; 25 } 26 27 void Build() 28 { 29 int i,t; 30 31 queue<int> Q; 32 Q.push(0); 33 while(!Q.empty()) 34 { 35 t=Q.front();Q.pop(); 36 for(i=0;i<26;++i) 37 { 38 if(ch[t][i]) 39 { 40 Q.push(ch[t][i]); 41 Fail[ch[t][i]]=t?ch[Fail[t]][i]:0; 42 } 43 else ch[t][i]=ch[Fail[t]][i]; 44 } 45 } 46 return ; 47 } 48 49 int main() 50 { 51 int i,q,p,top=0; 52 53 scanf("%s",s+1); 54 scanf("%d",&q); 55 for(i=1;i<=q;++i) 56 { 57 scanf("%s",tt+1); 58 Add(tt); 59 } 60 61 Build(); 62 p=0; 63 for(i=1;s[i];++i) 64 { 65 p=ch[p][s[i]-97]; 66 ++top; 67 Ans[top]=s[i]; 68 nv[top]=p; 69 if(lab[p])top-=lab[p],p=nv[top]; 70 } 71 72 for(i=1;i<=top;++i)printf("%c",Ans[i]); 73 74 printf("\n"); 75 return 0; 76 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术