hdu2222 Keywords Search & AC自动机学习小结

电子设计实战:用MOS管手把手搭建D触发器电路(含时序分析避坑指南) 本文详细介绍了如何使用MOS管从零开始搭建D触发器电路,重点解析了建立时间和保持时间等关键时序参数对电路稳定性的影响。通过实测波形分析和避坑指南,帮助电子工程师掌握D触发器的实际搭建技巧与优化方法,提升数字电路设计的可靠性。 阅读详情

传送门:http://http://acm.hdu.edu.cn/showproblem.php?pid=2222

思路:AC自动机入门题,直接上AC自动机即可。


对于构建AC自动机,我们要做的只有三件事:

1)构建字典树

2)构建失败指针

3)构建trie图(这道题好像不做这一步也能A。。。但是这一步不做是会被卡成O(n^2)的。。。)


1)第一步还是比较好理解的

根是虚根,边代表字母,那么根到终止节点的路径就是一个字符串,这样对于前缀相同的字符串我们就可以省下存公共前缀的空间。

加入一个模式串,我们就在trie树上一步一步走,没有这个儿子就新建,否则就按原来的边走。


2)第二步有一点复杂。

学AC自动机要有KMP的基础原因就在这里。fail指针就是KMP的next数组在有多个模式串时的升级版

KMP的next数组是指同一个模式串中,既是最长前缀又是后缀的子串的长度,这么定义是为了方便在匹配失败时跳转

而fail指针的作用也是为在匹配失败时跳转。因为是多串,一个点的fail指针指向与这一段的后缀相同的,另一个串前缀,这样就实现了在匹配失败时跳转。画个图更直观


然后就是求出fail指针了。求next数组时,我们可以由之前的next数组进行跳转得到现在的next数组,求fail指针也很类似。

我们可以一层一层地用bfs求出fail指针。

1.根节点的fail指向null,根节点的子节点的fail指向根(因为第一位就不匹配了,当然要重新开始)

2.求完fail的放到队尾

3.取出队头节点x,求它的所有儿子ch[x][i]的fail指针

如果ch[x][i]存在,那么fail[ch[x][i]]=ch[fai[x]][i](其实应该一直跳fail直到ch[x][i]存在,这也是不构建trie图会被卡成O(n^2)的原因,把不存在的儿子补好后,就只要跳一次了)

否则ch[x][i]=ch[fail[x]][i](其实就是第三步构建trie图,把所有不存在的儿子补好,省得每次跳很多次fail)

4.重复2和3直到队列为空

这样,AC自动机就构建好了


然后就是代码了。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxn=1000010,maxm=250010;
using namespace std;
int cas,n;char s[maxn];

struct AC_DFA{
    int tot,ch[maxm][26],fai[maxm],sum[maxm],q[maxm],head,tail;
    void clear(){tot=0,memset(ch,0,sizeof(ch)),memset(fai,0,sizeof(fai)*2);}
    void insert(){
        int p=0;
        for (int i=1;s[i];p=ch[p][s[i]-'a'],i++) if (!ch[p][s[i]-'a']) ch[p][s[i]-'a']=++tot;
        sum[p]++;
    }
    void getfail(){
        head=0,q[tail=1]=0,fai[0]=-1;
        while (head!=tail){
            int x=q[++head];
            for (int i=0;i<26;i++)
                if (ch[x][i]){
                    q[++tail]=ch[x][i];
                    int p=x==0?0:ch[fai[x]][i];
                    //while (p!=-1&&!ch[p][i]) p=fai[p];
                    fai[ch[x][i]]=p;
                }
                else ch[x][i]=x==0?0:ch[fai[x]][i];
        }
    }
    void work(){
        int ans=0;
        for (int i=1,p=0;s[i];i++){
            while (p&&!ch[p][s[i]-'a']) p=fai[p];
            p=ch[p][s[i]-'a'];
            for (int t=p;t;t=fai[t]) ans+=sum[t],sum[t]=0;//printf("%d %d\n",t,sum[t]),
        }
        printf("%d\n",ans);
    }
}T;

int main(){
    scanf("%d",&cas);
    while (cas--){
        scanf("%d",&n);T.clear();
        for (int i=1;i<=n;i++)
            scanf("%s",s+1),T.insert();
        T.getfail(),scanf("%s",s+1),T.work();
    }
    return 0;
}


全志V3S嵌入式驱动开发(解决kernel 5.2.y wifi驱动问题) ​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 wifi模块,之前测试的时候,开发板上用的是esp8089,当时内核时4.14.y,测试也是通过的。链接地址在这里, https://blog.youkuaiyun.com/feixiaoxing/article/details/131178420?spm=1001.2014.3001.5501 那个时候测试的时候,我们就说过,wifi驱动可能是除了镜像制作之外,最复杂的一个 阅读详情

相关推荐

[信号与系统]一阶与二阶连续时间系统和离散时间系统

定义:一阶连续时间系统由一阶线性常系数微分方程描述: dy(t)dt+ay(t)=bx(t) \frac{dy(t)}{dt} + a y(t) = b x(t) dtdy(t)​+ay(t)=bx(t)时间常数:时间常数 τ=1a\tau = \frac{1}{a}τ=a1​ 是系统响应速度的衡量指标。时间常数越小,系统响应越快。冲激响应:一阶系统的冲激响应是指数衰减或增长的形式。例如,对于一个单位冲激输入,响应为: h(t)=bae−at h(t) = \frac{b}{a} e^{-at} h(t)=

Andius的博客 2121

C++——AC自动机例题——Keywords Search(HDU2222)

Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 58664    Accepted Submission(s): 19253 Problem Description In the

McDonnell_Douglas的博客 1112

周立功CAN盒二次开发实录:用QT5.1.0解析汽车CAN报文(附数据可视化技巧)

本文详细介绍了基于QT5.1.0和周立功USBCAN-E-U设备进行汽车CAN总线二次开发的实战过程。核心内容包括利用CANdb++数据库解析原始报文并转换为物理值,以及通过QCustomPlot库实现高性能实时数据可视化,为车载诊断与车联网开发提供了一套完整的工程实践方案。

sugar的博客 1058

HDU2222-Keywords Search AC自动机

HDU2222-Keywords Search AC自动机算法

P_rogrammer的专栏 742

《网络安全自学教程》- SQL注入之报错注入原理+步骤+实战操作

这篇文章为大家解析报错注入的实现原理,结合实战案例讲解报错注入的使用步骤。

wangyuxiang946的博客 1万+

Matlab之App Designer 一键自动生成带有表格的报告

本文采用案例讲解的方式介绍了采用Matlab中的App Designer开发可视化GUI分析界面后,实现一键自动导出带有表格报告的方法和步骤。可以实现从报告编制等繁琐的工作中解脱出来。

m0_59012156的博客 355

【AC自动机】Hdu2222:Keywords Search

Hdu 2222:Keywords SearchDescriptionIn the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey also wants to bring this feature to his image retrieval system. Ev

puck_just_me的blog 705

运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案

本文主要介绍了运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 10万+

hdu 2222 Keywords Search(AC自动机入门题)

昨晚开始想学AC自动机,然后尽早看了看算导的KMP。。。以前看过,忘差不多了。 今天看了看一个学习AC自动机的文章,磕磕绊绊理解了。 trie的建立很随意,关键是失败指针这个概念。稍微有点抽象。这个指针的建立,用到了BFS,引用那个文章的话 “  假设有一个节点k,他的失败

小媛在努力~ 2599

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图。

qq_36287830的博客 3101

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 451

【AC自动机_模板】HDU 2222 Keywords Search

HDU 2222 Keywords Search 题意:问文本串中出现了多少种模式串。 AC CODE【AC奥特曼板子题~】 #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cmath&gt; #include &lt;string&gt; #include &lt;cstring&gt; #include &l...

L_X_ 211

Vue3 - 详细实现流程图编辑器可视化平台示例代码,打造前端web网页流程图在线编辑绘制操作展示,vue3自定义绘制流程图在页面上画流程图功能(提供各种操作按钮及节点控件,界面美观交互式流程图插件)

vue3,绘制流程图,在线流程图制作,在vue3中实现流程图,vue3做一个制作流程图的功能,vue3流程图组件,vue3流程图,流程图绘制展示,vue3流程图可视化在线编辑源码,基于VUE3的在线绘制流程图工具,vue3+logicflow流程图,绘制动态流程图并自定义节点和线,vue使用logicFlow绘制流程图,生成各种流程图图形可连接点移除,基于Vue的流程图组件,工作流程图,流程编辑器,vue3流程组件,vue-flow绘制流程图,绘制流程图示例demo,vue3 logicflow流程图使用教

🏆 前端领域优质创作者 9966

hdu 2222 Keywords Search (AC自动机)

视频地址  http://www.bilibili.com/video/av6295004/index_2.html 题目地址 http://acm.hdu.edu.cn/showproblem.php?pid=2222 简介地址 http://blog.youkuaiyun.com/niushuai666/article/details/7002823 AC自动机简介:  首

bushadid的博客 780

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU2222 Keywords Search 【AC自动机】

HDU2222 Keywords Search Problem Description In the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey also wants to bring this feature to his image retri...

Dream_maker的博客 354

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

AC自动机 hdu2222 Keywords Search

传送门:点击打开链接 题意:给一个字典,再给一个查询串,问字典中的单词一共在这个查询串中出现了多少次。 思路:裸AC自动机。。第一次做,照着bin神代码写了个模板留着以后贴 #include #include #include #include #include #include #include #include #include #include #include #include #i

qwb的博客 852

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HDU 2222 Keywords Search【ACAM】

HDU 2222 Kerwords Search 代码风格模仿自:USETC每周算法讲解,AC自动机,郭老师! 输入一个T,对于每一个T给你一个n,接下来输入P个模式串,然后给你一个L串,L中出现了多少P中的串。 这是一道比较基础的AC自动机问题,我只不过是为了不想用板子而直接写,因此写此博文。 将容易遗漏或者写错的地方进行了注释的标注,用于提示自己,也用于与大家进行分享。 #include&lt...

Irish_Moonshine的博客 259

hdu2222 Keywords Search

Keywords Search 题目背景: HDU - 2222  分析:AC自动机板子题 Source: #include #include #include #include #include #include using namespace std; const int MAXN = 500000 + 50; int n, t, tot;

scarlyw的博客 412

【HDU】【P2222】【Keywords Search】【题解】【AC自动机】

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2222 蒟蒻AC自动机diyiti

退役狗的专栏 887

HDU 2222 Keywords Search AC自动机 Fail数组详解

AC自动机 (Aho-Corasick automaton) 的模板题。

Curren的博客 663

HDU2222 Keywords Search —— AC自动机

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 Keywords Search Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 65272...

alince20008的博客 168

HDU 2222 Keywords Search (AC自动机)

题面 输入样例 1 5 she he say shr her yasherhs 输出样例 3 题解 代码

qq_44791484的博客 231

Hdu 2222 Keywords Search

package hdu; import java.util.ArrayDeque; import java.util.Scanner; /** * @description HDU 2222 Keyboards Search. * @technique AC自动机, 字典树。 * @version 1.2 * @date 20120727 * @time 20:2

Alex 493

AC自动机 模板 【HDU2222】 Keywords Search

AC自动机(Aho Corasick Automaton) 如果匹配字符串,一个模式串,一个匹配串,KMP就搞定了。 但是如果现在有多个模式串怎么办呢?每个模式串都处理一遍,再与匹配串匹配就太慢了,所以有了AC自动机,来解决这类问题。AC自动机可以看成是Trie树和KMP的结合体,具体的实现方式就是在每个节点处增添一个fail指针,作用与KMP中的失配时用的跳转数组差不多(虽然在匹配的大多数时候

Todobe 500

hdu_2222_Keywords Search(AC自动机板子)

题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include #include #define F(i,a,b) for(int i=a;i<=b;i++) const int AC_N=10001*50,tyn=26;//数量乘串长,类型数量 struct AC_automation{ int tr[AC_N][tyn],cnt[AC_N],

bin_gege的博客 354

hdu2222 Keywords Search ac自动机

#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=1e7+5; int cnt; struct node{ node *next[26]; node *fai

nankeyimeng的博客 1048
上一篇: bzoj4196: [Noi2015]软件包管理器
下一篇: bzoj2938: [Poi2000]病毒
thy_asdf
博客等级 码龄12年 16粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值