AC自动机模板
来源:互联网 发布:入党申请书 知乎 编辑:程序博客网 时间:2024/06/09 22:07
我是在kuangbin巨巨的模板的基础上加上了初始化和模式串的插入。
代码:
struct Trie{int next[MAXN][26], fail[MAXN], end[MAXN];int root, L;void insert(char buf[]){int len = strlen(buf), now = 0;for(int i = 0; i < len; i++){if(next[now][buf[i] - 'a'] == -1) next[now][buf[i] - 'a'] = ++L;now = next[now][buf[i] - 'a'];}end[now]++;}void init()//不要忘记初始化{root = L = 0;memset(next, -1, sizeof(next));memset(fail, 0, sizeof(fail));memset(end, 0, sizeof(end)); }void build(){queue<int>q; fail[root] = root;for(int i = 0; i < 26; i++)if(next[root][i] == -1)next[root][i] = root;else{fail[next[root][i]] = root;q.push(next[root][i]);}while(!q.empty()){int now = q.front(); q.pop();for(int i = 0; i < 26; i++)if(next[now][i] == -1)next[now][i] = next[fail[now]][i];else{fail[next[now][i]] = next[fail[now]][i];q.push(next[now][i]);}}}int query(char buf[]){int len = strlen(buf); int now = root; int res = 0;for(int i = 0; i < len; i++){now = next[now][buf[i] - 'a'];int tmp = now;while(tmp != root){res += end[tmp];end[tmp] = 0;//注意这句话根据题来改变tmp = fail[tmp];}}return res;}};
阅读全文
0 0
- 【AC自动机】AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板 hdu2222
- AC自动机模板
- AC自动机模板
- 数据结构--AC自动机--模板
- ac自动机模板
- AC自动机模板
- AC自动机模板
- hdu2222 ac自动机模板
- ac自动机模板。。。。。
- AC自动机模板 LA4670
- AC自动机模板
- jQuery基础:动态生成表格和绑定事件
- Elasticsearch为记录添加时间戳timestamp
- 一篇讲解端口的很不错的一篇文章-------------
- iosprotocolbuffer
- 文件查找
- AC自动机模板
- 对v7包下的AlertDialog(弹出框)在实际开发中遇到的小问题进行阐述
- Pytorch实现CNN卷积神经网络
- Hadoop之HDFS存储及读取机制
- 并发与计算机体系结构
- Spring集成Quartz定时任务&&Cron表达式详解
- java中互锁代码测试
- 写简历方法
- Android进阶之路