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. css 串联选择器和后代选择器

    串联选择器:作用在同一个标签上 <div class=”a” id ="qq"><span>look at the color</span>&l ...

  2. Redis客户端之Spring整合Jedis

      1.下载相关jar包,并引入工程: jedis-2.4.2.jar commons-pool2-2.0.jar 2.将以下XML配置引入spring <bean id="shard ...

  3. 菜鸟学习Hibernate——配置Hibernate环境

    一.概念. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.既然学习Hibernate那么第 ...

  4. 最大似然估计(MLE)和最大后验概率(MAP)

    最大似然估计: 最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”.简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均值与方差未知 ...

  5. qtp 设置等待时间

    1.file->settings->run .默认的时间是20 秒 2. browser("browser").Navigate http://www.baidu.co ...

  6. android EditText获取光标位置并安插字符删除字符

    android EditText获取光标位置并插入字符删除字符1.获取光标位置int index = editText.getSelectionStart(); 2.在光标处插入字符int index ...

  7. Go中简单的文件读写

    Go中的ioutil包可以方便的实现文件读写.代码: package main import ( "fmt" "io/ioutil" ) func main() ...

  8. iPhone的震动 基于SDK8.0 Swift实现

    导入AudioToolbox.framework包 在swift文件中  import AudioToolbox AudioServicesPlaySystemSound(SystemSoundID. ...

  9. maven学习手记 - 2

    学习目标 maven 的插件和目标: maven 的生命周期和阶段.   前言 在手记1中看到执行 mvn clean package 时,maven 自动执行了compile 和 test 操作. ...

  10. [转]network-manager与interfaces冲突

      [转]network-manager与interfaces冲突   http://blog.sina.com.cn/s/blog_48a45b9501010681.html   网络配置的两种方式 ...