/****************************************************************************************************
HDU最2的题目~AC自动机模板,根据Racebug的模板改的,结果改了下140ms过的~YM Racebug~
****************************************************************************************************/
#include <iostream>
#include <functional>
#include <algorithm>
//#include <hash_map> //Visual C++ lib
#include <complex>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <sstream>
#include <utility>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <limits>
#include <memory>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
using namespace std;
#define LOWBIT(x) ( (x) & ( (x) ^ ( (x) - 1 ) ) )
#define CLR(x, k) memset((x), (k), sizeof(x))
#define CPY(t, s) memcpy((t), (s), sizeof(s))
#define LEN(s) static_cast<int>( strlen((s)) )
typedef long long LL; //GNU C++
typedef unsigned long long ULL;
//typedef __int64 LL; //Visual C++ 2010
//typedef unsigned __int64 ULL;
typedef double LF;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef pair<double, double> PDD;
//typedef hash_map<int, int>::iterator HMI;
typedef map<int, int>::iterator MI;
typedef vector<int>::iterator VI;
typedef list<int>::iterator LI;
typedef set<int>::iterator SI;
const int INF_INT = 0x3f3f3f3f;
const LL INF_LL = 0x7fffffffffffffffLL; //15f
const double oo = 10e9;
const double eps = 10e-9;
const double PI = acos(-1.0);
const int MAXN = 500004;
const int MAXC = 26;
int test, n;
char str[MAXN * 2];
struct Node
{
Node *next[MAXC];
Node *fail;
int cnt;
}trie[MAXN], *root;
int ncnt;
queue<Node *>Q;
void initTrie()
{
root = trie;
ncnt = 1;
for (int i = 0; i < MAXC; ++i)
{
root->next[i] = NULL;
}
root->fail = NULL;
root->cnt = 0;
return ;
}
Node* createNode(Node *crt)
{
for (int i = 0; i < MAXC; ++i)
{
crt->next[i] = NULL;
}
crt->fail = NULL;
crt->cnt = 0;
return crt;
}
void insert(char *ch)
{
Node *ptr = root;
int nxt;
while (*ch != '\0')
{
nxt = *ch - 'a';
if (NULL == ptr->next[nxt])
{
ptr->next[nxt] = createNode( &trie[ncnt++] );
}
ptr = ptr->next[nxt];
++ch;
}
++ptr->cnt;
return ;
}
void buildAC_automation()
{
while (!Q.empty())
{
Q.pop();
}
Q.push(root);
Node *crt, *nxt, *ptr;
while (!Q.empty())
{
crt = Q.front();
Q.pop();
for (int i = 0; i < MAXC; ++i)
{
nxt = crt->next[i];
if (nxt != NULL)
{
for (ptr = crt->fail; ptr != NULL; ptr = ptr->fail)
{
if (ptr->next[i] != NULL)
{
nxt->fail = ptr->next[i];
//nxt->cnt += nxt->fail->cnt; //
break ;
}
}
if (NULL == ptr)
{
nxt->fail = root;
}
Q.push(nxt);
}
else
{
if (root == crt)
{
crt->next[i] = root;
}
else
{
crt->next[i] = crt->fail->next[i];
}
}
}
}
return ;
}
int query(char *str)
{
int res = 0, id;
Node *ptr = root, *ptt;
while (*str != '\0')
{
id = *str - 'a';
ptr = ptr->next[id];
for (ptt = ptr; ptt != NULL && ptt->cnt != -1; ptt = ptt->fail)
{
res += ptt->cnt;
ptt->cnt = -1;
}
++str;
}
return res;
}
void ace()
{
char ch[52];
for (scanf("%d", &test); test--; )
{
scanf("%d%*c", &n);
initTrie();
for (int i = 0; i < n; ++i)
{
gets(ch);
insert(ch);
}
buildAC_automation();
gets(str);
printf("%d\n", query(str));
}
return ;
}
int main()
{
ace();
return 0;
}
相关推荐
PyCharm旧版本下载地址
快捷找到PyCharm历史版本下载地址
AC自动机的初步学习 hdu2222 AC自动机入门题
本来KMP和trie树就不太熟悉,但是就是想弄明白AC自动机是什么东东,所以就找了一些博客学习了一下,用hdu2222练了一下手。 推荐几篇很好的博客: http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html 这篇博客绝对是良心之作,尤其是那些图片,可以很好地讲述AC自动机的失败指针和trie图构造。 还有几篇不错
Switch游戏安装新思路:抛弃Commander One,试试这款免费的Mac神器OpenMTP
本文介绍了Mac用户安装Switch游戏的新选择——免费工具OpenMTP,对比收费软件Commander One,OpenMTP在MTP连接稳定性和文件管理上更具优势。详细解析了OpenMTP的安装配置、核心功能及实战操作,帮助用户高效完成游戏安装,特别适合已破解并安装DBI的Switch用户。
HDU2222-Keywords Search AC自动机
HDU2222-Keywords Search AC自动机算法
企业微信审批流开发避坑指南:从零搭建自定义审批模板(含完整代码)
本文为企业微信审批流开发提供了从零搭建自定义审批模板的完整指南。通过对比内置模板与自建引擎的优劣,详细阐述了利用企业微信开放API和自建应用实现高度灵活审批流程的方案。文章重点解析了前端JS-SDK安全调用、后端签名生成与回调处理的核心代码,并分享了流程引擎设计、安全加固及性能监控等实战经验,帮助企业开发者避开常见陷阱,构建贴合业务的自定义审批系统。
告别游戏卡关!用Cheat Engine 7.5修改单机游戏数据的保姆级教程(附Tutorial靶场练习)
本文提供了一份详细的Cheat Engine 7.5使用教程,帮助玩家轻松修改单机游戏数据。从基础操作到高级技巧,包括精确值扫描、模糊扫描、指针扫描和代码注入,教程还涵盖了《植物大战僵尸》和《星露谷物语》的实战案例,确保玩家能够安全、高效地优化游戏体验。
hdu 2222 AC自动机
http://acm.hdu.edu.cn/showproblem.php?pid=2222 hdu 2222 AC自动机的模板题,题意大楷是:给出一些单词,和一段文本,输出文本中出现的单词个数,重复的不计。 AC自动的原理和KMP的原理差不多,AC自动机的Fail指针和KMP的next数组的原理是一样的。 具体的AC自动机的阐述网上很多,在这里我就不画蛇添足了。 来看看我写的一
STM32H7 FOC控制时序优化与PWM中点更新策略
在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,控制时序精度是决定电流环带宽、观测器收敛性与动态响应能力的基础要素。其核心在于理解PWM生成、ADC采样与控制计算三者之间的硬件级时间耦合关系——尤其在中心对齐模式下,标准更新机制引入的半周期延迟会破坏电压-电流瞬时映射,导致滑模观测器失配与高频相位滞后。通过将PWM更新事件绑定至重复计数器(RCR)清零点,可实现控制指令在开关周期中点生效,使等效电压矢量中心与计算时刻严格对齐。该策略显著提升系统确定性,为20 kHz以上高频电流环提供物理支撑,并广
HDU 2222 AC 自动机
题意 传送门 HDU 2222 题解 多模式匹配,裸的 ACACAC 自动机。 #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define maxn 10000 #define maxl 1000005 struct node { int cnt, a[26];
C#串口通信上位机开发实战:轻松实现硬件控制与数据交互
摘要:本文介绍如何使用C#开发串口通信上位机应用,实现与硬件设备(如传感器、PLC等)的数据交互。文章涵盖串口通信原理、开发环境配置、功能实现(串口连接管理、数据收发、实时显示)及UI设计,重点讲解SerialPort类的应用、多线程数据接收处理和错误优化。通过Windows Forms构建直观界面,帮助开发者快速掌握工业控制和自动化系统中的串口通信技术,为物联网和智能设备开发提供实用解决方案。全文约150字。
阻抗控制器实现机器人关节运动控制
本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章如:PID反馈控制器、前馈控制器、前馈+反馈控制器等等如:机械臂模型(几何解算)控制器、小车底盘运动学模型(几何解算)的控制器、四足机器人模型(预测迭代)的控制器等等如:微分平坦(无人机的轨迹跟随)等等如:MPC优化控制算法如:线性二次调节器(LQR)是基于模型的控制器,使用车辆状态来使误差最小化,Apollo使用LQR进行横向控制。横向控制包含四个组件:横向误差、横向误差的变化率、朝向误差和朝向的变化率。
AC自动机(HDU2222)
HDU2222 #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cstdio> #include<queue> using namespace std; struct Trie { Trie *n...
YOLOv8改进 | 主干网络 | 将主干网络替换为轻量化的ShuffleNetv2【原理 + 完整代码】
yolov8,yolov8创新,yolov8改进
【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
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
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
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
AC自动机模板(hdu2222)
具体学习参考https://blog.youkuaiyun.com/creatorx/article/details/71100840 模板来自kuangbin大神,HDU2222模板题 //====================== // HDU 2222 // 求目标串中出现了几个模式串 //==================== #include<...
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
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...
【字符串】【hdu2222】AC自动机
AC自动机 一种多模匹配算法(如:有N个字符串Si以及一个字符串T,计算每个字符串Si在T中出现的次数) 原理:KMP+Trie 算法详解:ac自动机最详细的讲解,让你一次学会ac自动机 模板 const int C = 26; const int N = 1e5; stack <int> st; struct Node { int son[C], next, end; ...
【AC自动机_模板】HDU 2222 Keywords Search
HDU 2222 Keywords Search 题意:问文本串中出现了多少种模式串。 AC CODE【AC奥特曼板子题~】 #include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include &l...
【AC自动机】hdu2222 hdu2896 hdu3065 zoj3430 poj2778 hdu2243
AC自动机用于多个模式串与多个母串的匹配。 第一步:根据模式串建立字典树int len=strlen(w), r=root; for(int i=0;i<len;++i) { if(tree[r].ch[w[i]])r=tree[r].ch[w[i]]; else r=tree[r].ch[w[i]]=++cnt; } ++tree[r].c
AC自动机 模板 【HDU2222】 Keywords Search
AC自动机(Aho Corasick Automaton) 如果匹配字符串,一个模式串,一个匹配串,KMP就搞定了。 但是如果现在有多个模式串怎么办呢?每个模式串都处理一遍,再与匹配串匹配就太慢了,所以有了AC自动机,来解决这类问题。AC自动机可以看成是Trie树和KMP的结合体,具体的实现方式就是在每个节点处增添一个fail指针,作用与KMP中的失配时用的跳转数组差不多(虽然在匹配的大多数时候
hdu 2222 AC自动机模板题
首先学KMP 推荐《算法导论》以及本人的KMP博文 http://blog.youkuaiyun.com/u011026968/article/details/10382659 在学Trie 这个其实不难,随意找点资料就行 然后开始学AC自动机 http://www.cppblog.com/mythit/archive/2014/03/09/80633.html#206110 这个博文的讲解很好
AC自动机板子(hdu2222)&(hdu2896)
参考博客:https://blog.youkuaiyun.com/bestsort/article/details/82947639 AC代码:hdu2222 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<queue> #in...
【hdu2222-Keywords Search】AC自动机基础裸题
【hdu2222-Keywords Search】AC自动机基础裸题 http://acm.hust.edu.cn/vjudge/problem/16403 题意:给定n个单词,一个字符串,问字符串中出现了多少个单词。(若单词her,he,字符串aher中出现了两个单词) 题解: 每个单词末尾节点sum=1;find的时候每个点都顺着fail...
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],
HDU 2222(AC自动机模板)
AC自动机这个算法网上有很多资料,这里就不多赘述了。当从一个字符串中查找另一个字符串,我们有快速的算法KMP。现在的问题是要从一个字符串中查找很多字符串,或者要从多个字符串里分别查找很多字符串。AC自动机就是解决这个问题的。HDU2222的题意就是要从一个字符串中查找很多字符串,很裸的模板题。不过测试数据相当的水,有很多人错误的程序都AC掉了。我们把一个字符串中查找很多字符串中的一个字符串成为文本...
4444



被折叠的 条评论
为什么被折叠?



