AC自动机
2021/4/18 10:26:50
本文主要是介绍AC自动机,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
学习博客
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<sstream> #include<queue> #include<map> #include<vector> #include<set> #include<deque> #include<cstdlib> #include<ctime> #define dd double #define ld long double #define ll long long #define ull unsigned long long #define N 1001000 #define M number using namespace std; const int INF=0x3f3f3f3f; inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } struct ACzdj{ int tr[N][26],cnt; int end[N];int fail[N]; inline void insert(char *s){ int p=0; for(int i=0;s[i];i++){ int k=s[i]-'a'; if(!tr[p][k]) tr[p][k]=++cnt; p=tr[p][k]; } end[p]++; } inline void build(){ queue<int> q; memset(fail,0,sizeof(fail)); for(int i=0;i<26;i++) if(tr[0][i]) q.push(tr[0][i]); while(q.size()){ int top=q.front();q.pop(); for(int i=0;i<26;i++){ if(tr[top][i]){ fail[tr[top][i]]=tr[fail[top]][i]; q.push(tr[top][i]); } else tr[top][i]=tr[fail[top]][i]; } } } inline void clear(){ memset(tr,0,sizeof(tr)); memset(end,0,sizeof(end)); memset(fail,0,sizeof(fail)); cnt=0; } inline int query(char *t){ int p=0,res=0; for(int i=0;t[i];i++){ p=tr[p][t[i]-'a']; for(int j=p;j&&~end[j];j=fail[j]) res+=end[j],end[j]=-1; } return res; } }; ACzdj ac; int main(){ int n=read(); for(int i=1;i<=n;i++){ char s[N]; scanf("%s",s); ac.insert(s); } ac.build(); char t[N]; scanf("%s",t); int ans=ac.query(t); printf("%d",ans); return 0; }
这篇关于AC自动机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升