AC自动机模板
来源:互联网 发布:乐视视频 mac 编辑:程序博客网 时间:2024/05/22 17:04
AC自动机的功能类似于kmp,用于处理多个子串匹配一个母串的问题。
主要思想是:先建立一颗trie树,然后再把空的节点补全为fail所指向的点,也就是补全一颗树,最后记得更新tag值就完了
#include <iostream>using namespace std;void add(char *str){//构建trie树 我的变量名错了(大雾)int p=1;int len=strlen(str);for(i=0;i<len;i++){ if(tri[p][str[i]-'a']==0){ trilen++; tri[p][str[i]-'a']=trilen; } p=tri[p][str[i]-'a'];}tag[p]++;}int ACcreat(){//构建ac自动机 同时补全所有空的trie[i][j]指针 queue <int> q; fail[1]=1; for(i=0;i<26;i++){//先处理根节点的child的fail指针 if(tri[1][i]){ fail[tri[1][i]=1; q.push(tri[1][i]); } else tri[1][i]=1; } int u; while(!q.empty()){//广搜所有的点 可以保证所有的fail指针之前都访问过 u=q.front(); q.pop(); for(int i=0;i<26;i++){ if(tri[u][i]){ fail[tri[u][i]]=tri[fail[u]][i]; q.push(tri[u][i]); } else tri[u][i]=tri[fail[u]][i]; } tag[u]+=tag[fail[u]];//当前节点累计结束串个数 }}int main(){scanf("%d",&m);scanf("\n%d",mstr);for(i=1;i<=m;i++){ scanf("\n%s",str); add(str);}return 0;}
0 0
- 【AC自动机】AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板 hdu2222
- AC自动机模板
- AC自动机模板
- 数据结构--AC自动机--模板
- ac自动机模板
- AC自动机模板
- AC自动机模板
- hdu2222 ac自动机模板
- ac自动机模板。。。。。
- AC自动机模板 LA4670
- AC自动机模板
- (11) spring boot使用jsp实例
- 虚拟机编译webrtc
- 耦合
- 难于捉摸的经络系统?
- 国嵌嵌入式学习笔记-链接器脚本语法格式
- AC自动机模板
- WebSocket原理
- Retrofit
- JSP 页面中用绝对路径显示图片
- C++语言SetCurrentDir(ExtractFilePath(Application->ExeName))这句是什么意思
- 基于spark之上的即席分析-卓越性能
- Python+selenium创建自动执行命令脚本
- linux: 常用命令积累-自用,持续更新
- Memcache知识点梳理