zoukankan      html  css  js  c++  java
  • AC自动机模板

    看了别人写的AC自动机,瞬时觉得自己写的好难看,于是决定改写一下,贴一下模板,以后备用

    #define maxn 220000
    #define ll long long
    
    int n, m;
    
    struct Trie{
    	Trie *fail, *go[26];
    	bool ter;
    	void init(){
    		memset(go, 0, sizeof(go)); fail = NULL; ter = false;
    	}
    }pool[maxn], *root;
    int tot;
    
    void insert(char *c){
    	int len = strlen(c); Trie *p = root;
    	for (int i = 0; i < len; i++){
    		if (p->go[c[i] - 'a'] != 0) p = p->go[c[i] - 'a'];
    		else{
    			pool[tot].init();
    			p->go[c[i] - 'a'] = &pool[tot++];
    			p = p->go[c[i] - 'a'];
    		}
    	}
    	p->ter = true;
    }
    
    void getFail()
    {
    	queue<Trie*> que;
    	root->fail = root;
    	for (int i = 0; i < 26; i++){
    		if (root->go[i]) {
    			que.push(root->go[i]); root->go[i]->fail = root;
    		}
    		else{
    			root->go[i] = root;
    		}
    	}
    	while (!que.empty()){
    		Trie *p = que.front(); que.pop();
    		for (int i = 0; i < 26; i++){
    			if (p->go[i]){
    				que.push(p->go[i]);
    				p->go[i]->fail = p->fail->go[i];
    				p->go[i]->ter |= p->go[i]->fail->ter;
    			}
    			else{
    				p->go[i] = p->fail->go[i];
    			}
    		}
    	}
    }
    
  • 相关阅读:
    初识面向对象
    Git 子模块
    至今为止项目中遇到的问题
    vuex , 简单入(liao)门(jie)
    Git rebase
    Git
    js设计模式工厂模式
    vue slot
    Jquery学习,一道笔试题:关于表格【最近记】
    闭包与this学习
  • 原文地址:https://www.cnblogs.com/chanme/p/3670026.html
Copyright © 2011-2022 走看看