AC自动机
来源:互联网 发布:华泰软件工程有限公司 编辑:程序博客网 时间:2024/06/14 09:36
http://www.cnblogs.com/huangxincheng/archive/2012/12/02/2798317.html
http://www.cnblogs.com/Lyush/archive/2011/09/04/2165975.html
http://www.cnblogs.com/Booble/archive/2010/12/05/1897121.html
#include <queue>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define CLR(a,v) memset(a,v,sizeof(a))namespace Trie{ const int N = 1e6 + 5; const int Size = 26; int top; struct Node{ Node *next[Size], *f; int ended_cnt; }node[N], *root; inline Node* new_node() { node[top].ended_cnt = 0; CLR(node[top].next,false); return &node[top++]; } void init() { top = 0; root = new_node(); } void insert(char *s) { Node *u = root; for(int i=0;s[i];i++) { int id = s[i] - 'a'; if(u->next[id] == NULL) u->next[id] = new_node(); u = u->next[id]; } u->ended_cnt++; }}namespace ACam{ using namespace Trie; void get_fail() { queue<Node*> Q; for(int i=0;i<Size;i++) { Node *&ch = root->next[i]; if(!ch) ch = root; else { ch->f = root; Q.push(ch); } } while(!Q.empty()) { Node *cur = Q.front();Q.pop(); for(int i=0;i<Size;i++) { Node *&ch = cur->next[i]; if(!ch) ch = cur->f->next[i]; else { ch->f = cur->f->next[i]; Q.push(ch); } } } } int match(char *s) { int ans = 0; Node *u = root; for(int i=0;s[i];i++) { int id = s[i] - 'a'; u = u->next[id]; Node *v = u; while(v != root) { ans += v->ended_cnt; v = v->f; } } return ans; }}
- AC自动机...
- AC自动机
- AC 自动机
- AC自动机
- AC自动机
- ac自动机
- ac自动机
- AC自动机
- AC自动机
- AC自动机
- AC自动机
- AC自动机
- AC 自动机
- ac自动机
- AC自动机
- AC自动机
- AC自动机
- AC自动机
- 文件的输入和输出-cin用法
- 二进制文件和文本文件读写方法
- 删除所有目录下的文件
- 国外的一些测试网站
- Collection集合框架
- AC自动机
- 显示文件A, B中共有的行, A有B无或A无B有的行
- Lambda表达式
- 六步了解Oracle表空间状态
- 通过反射调类中的private方法
- Aix系统下增加Oracle temp 表空间 (裸设备方式)
- Oracle密码管理五大要点
- IOS设计模式总结
- IE Javascript 进阶调试