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

STM32低功耗模式下ADC采样抖动的5个隐藏陷阱及解决方案(实测避坑) 本文深入探讨了STM32低功耗模式下ADC采样抖动的5个常见陷阱及解决方案,包括多通道采样电压跃迁、外设开关信号稳定、低功耗模式与ADC时钟同步、输入阻抗失配以及基准电压稳定性问题。通过实测数据和优化代码示例,帮助工程师有效规避ADC采样数据抖动问题,提升物联网设备的测量精度和稳定性。 阅读详情

传送门: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;
}


STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化 本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。 阅读详情

相关推荐

以太网传输硬件设计大全

1.网线的介绍RJ45由插头和插做组成,也就是我们常说的网口和网线。RJ45 网线插头又称水晶头,共有八芯做成。RJ45网络传输线分为直通线、交叉线和全反线。直通线用于异种网络设备之间的互连,例如,计算机与交换机。交叉线用于同种网络设备之间的互连,例如,计算机与计算机。全反线用于超级终端与网络设备的控制物理接口之间的连接。下面将介绍一下各线的作用和区别。1.直通线:又叫正线或标准线,两端采用568B做线标准,注意两端都是同样的线序且一一对应。直通线是应用最广泛,现在最常用的线。

weixin_45365488的博客 6749

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

手把手教你用SlowFast训练自定义手势识别数据集(附FFmpeg抽帧技巧)

本文提供了一份基于SlowFast架构训练自定义手势识别数据集的完整实战指南。文章重点剖析了数据准备的核心挑战,详细讲解了利用FFmpeg进行高、低帧率抽帧的技巧,并介绍了构建半自动标注流水线、生成符合SlowFast要求的AVA格式数据集文件的具体方法。最后,针对手势识别场景,给出了关键的模型训练配置与调优建议,帮助开发者高效完成从数据到模型的全流程。

s1t2u3的博客 909

HDU2222-Keywords Search AC自动机

HDU2222-Keywords Search AC自动机算法

P_rogrammer的专栏 742

分享一些基于微信小程序开发的小游戏源码

小游戏小程序是运行在微信生态系统(或其他支持小程序的平台)中的轻量级应用程序,专为休闲游戏体验而设计的小程序子类别,小游戏小程序通常体积较小,加载速度快,用户无需等待长时间即可开始游戏。用户无需下载或安装单独的游戏应用程序,即可通过小程序入口直接进入游戏,同时小游戏小程序通常包含排行榜、分享功能等社交元素,可以增强游戏体验并促进用户参与。game.js:游戏页面的逻辑文件,包含页面数据、生命周期函数、事件处理函数等。game.wxml:游戏页面的结构文件,定义了页面的布局和组件。

xinshangdian的博客 6226

鸿蒙开发实战项目(九十二):HUAWEI Health血压测量

是华为开发的用于运动健康领域的一个开放平台, 三方APP可以借助HUAWEI Health开放平台提供的。

斌擎科技 1132

【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

UltraScale系列底层结构(3)——URAM概述

在UltraScale+™ 器件中,除了我们在常规熟悉的BRAM资源以外,还额外提供了URAM(UltraRAM)资源。 UltraRAM 是一种单时钟同步操作的高密度存储器,每个 UltraRAM 块可存储 288 Kb 数据,配置为 4K x 72 位的存储单元,其容量是 Block RAM 的八倍。虽然 UltraRAM 内部使用单端口存储单元,但通过在一个时钟周期内顺序执行端口 A 和端口 B 的操作,实现了双端口功能。

apple_53311083的博客 2831

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

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

小媛在努力~ 2599

PyInstaller打包后在Win7无法运行,提示缺少`api-ms-win-core-path-l1-1-0.dll`问题解决

这个问题的关键在于Python 3.12和Windows 7之间的兼容性问题。解决方法是使用Python 3.8.8版本进行打包,确保程序能够在Windows 7系统上运行。如果你也遇到类似的问题,不妨尝试降级Python版本,看看是否能够解决。希望我的经验能够帮到你!如果你在使用PyInstaller打包时遇到其他问题,欢迎留言讨论。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 994

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 135

【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

win10解决IE浏览器安装不上的问题(卸载依然显示不能安装)

目前win10 系统不支持外部ie安装程序,所以必须用win10自带的应用来安装 一、错误的卸载的方式 在控制面板的当前安装的程序界面是看不到ie的,需要选择控制面板左上角的启用或关闭windows功能 将ie11前面的勾勾去掉 这种方法是很多网站上的误区,其实这并没有卸载成功ie只是把ie的功能关闭了,但是他还在你的电脑上。你可以理解为我们说的对文件夹执行的隐藏文件夹功能。那个隐藏的文件夹依...

清平乐的技术专栏 3万+

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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的博客 355

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

AC自动机 hdu2222 Keywords Search

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

qwb的博客 852

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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、付费专栏及课程。

余额充值