HDU 3065,模板(备忘录)

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
#define M 2222222
char sx[][];
int n;
char s[M]; struct Trie{
int ch[M][],end[M],fail[M],cnt,root;
int b[M];
int Newnode(){
cnt++;
memset(ch[cnt],-,sizeof(ch[cnt]));
end[cnt]=-;
fail[cnt]=-;
return cnt;
}
void init(){
cnt=;
root=Newnode();
memset(b,,sizeof(b));
} void insert(char *s,int x){
int len=strlen(s),pos=root;
for (int i=;i<len;i++){
int v=s[i];
if (ch[pos][v]==-) ch[pos][v]=Newnode();
pos=ch[pos][v];
}
end[pos]=x;
} queue<int> Q;
void get_fail()
{
fail[root]=root;
for (int i=;i<;i++){
if (ch[root][i]==-) ch[root][i]=root;
else {
fail[ch[root][i]]=root;
Q.push(ch[root][i]);
}
}
while (!Q.empty()){
int pos=Q.front();
Q.pop();
for (int i=;i<;i++)
if (ch[pos][i]==-) ch[pos][i]=ch[fail[pos]][i];
else {
fail[ch[pos][i]]=ch[fail[pos]][i];
Q.push(ch[pos][i]);
}
}
}
void query(char *s1){
int len=strlen(s1),pos=root;
for (int i=;i<len;i++){
if (s1[i]<'A'||s1[i]>'Z') {pos=root;continue;}
int temp=ch[pos][s1[i]];
pos=temp;
while (temp!=root){
if (end[temp]!=-) b[end[temp]]++;
temp=fail[temp];
}
}
for (int i=;i<=n;i++)
if (b[i]) printf("%s: %d\n",sx[i],b[i]);
}
}AC; int main(){
while (scanf("%d",&n)!=EOF)
{
AC.init();
for (int i=;i<=n;i++) {
scanf("%s",sx[i]);
AC.insert(sx[i],i);
}
AC.get_fail();
scanf("%s",s);
AC.query(s);
}
return ;
}
 

AC 自动机在这里的更多相关文章

  1. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  2. AC自动机-算法详解

    What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. 简单的说,KMP用来在一篇文章中匹配一个模式串:但 ...

  3. python爬虫学习(11) —— 也写个AC自动机

    0. 写在前面 本文记录了一个AC自动机的诞生! 之前看过有人用C++写过AC自动机,也有用C#写的,还有一个用nodejs写的.. C# 逆袭--自制日刷千题的AC自动机攻克HDU OJ HDU 自 ...

  4. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  5. BZOJ 3172: [Tjoi2013]单词 [AC自动机 Fail树]

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3198  Solved: 1532[Submit][Status ...

  6. BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]

    1212: [HNOI2004]L语言 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1367  Solved: 598[Submit][Status ...

  7. [AC自动机]【学习笔记】

    Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...

  8. AC自动机 HDU 3065

    大概就是裸的AC自动机了 #include<stdio.h> #include<algorithm> #include<string.h> #include< ...

  9. AC自动机 HDU 2896

    n个字串 m个母串 字串在母串中出现几次 #include<stdio.h> #include<algorithm> #include<string.h> #inc ...

  10. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

随机推荐

  1. Kafka入门学习随记(二)

    ====Kafka消费者模型 参考博客:http://www.tuicool.com/articles/fI7J3m --分区消费模型 分区消费架构图 图中kafka集群有两台服务器(Server), ...

  2. MongoDB 学习笔记(二)—— MongoDB Shell

    MongoDB自带一个JavaScript shell 可以从命令行中与MongoDB交互,功能非常强大.如在上一节最后一张图所看到,可以执行JavaScript程序. 运行Shell 前提是启动Mo ...

  3. hihoCoder-1000-A+B

    题目描述:传统的A+B题 使用语言:C 代码: #include <stdio.h> int main(void){ int a,b; while((scanf("%d %d&q ...

  4. 关于datagridview的一些操作

    1.绑定datatable时,会显示出不需要显示的列可以加datagridview.AutoGenerateColumns = false; 2.如果datagridview的某列是数值型的,有小数, ...

  5. 生产库MySQL配置文件my.cnf详解

    OS:CentOS6.3 DB:5.6.16 [client] #客户端port = 3306 #数据库端口3306socket = /my/log/mysql.sock #MySQL套接字,多实例下 ...

  6. EF 随机排序

    /// <summary> /// 数据上下文扩展 /// </summary> public partial class dbDataContext : IUnitOfWor ...

  7. iOS学习之C语言数组

    一.一维数组     数组:具有相同类型的成员组成的一组数据     1.定义     元素:数组中存放的数据成为数组的元素     数组是构造类型     用{}来给构造类型赋初始值     类型修 ...

  8. rm -rf删除过多文件提示参数过长

    cd /var/tmp/ find . -name "*.log"|xargs rm -rf "*.log"

  9. FPGA仿真设置步骤

    1.FPGA仿真流程图 2.FPGA时序图 3.FPGA开发方式

  10. label swift

    var label = UILabel(frame: CGRectMake(10, 20, 300, 100)) label.text = "<Swift语言实战入门>" ...