Keywords Search (AC自动机)

  • 吉祥的hdu 2222

半日份七夕节的礼物。(连续越界打击,tle打击,最后玄学ac

问题所在:

  1. 越界:结点数组开小了。
  2. tle:问题在于初始化ch结点数组时,只初始化了ch[0]。
  3. 空间超限:就是maxm太大了

思路就是建Trie树,然后建立fail数组,继而查找。可查看Trie+AC自动机

建树:

void ins(char *s)                         //s是模式串
{
	int l = strlen(s),cur = 0;            //cur是结点所在标序
	for(int i=0;i

GetFail数组:(都说类似KMP,把线性递归改成了bfs)

void getfail()
{
	queue q;
	f[0] = 0;
	for(int c=0;c

find函数及统计单词出现个数:

int find(char *str)
{
	int n =strlen(str);
	int j = 0,cnt = 0;
	for(int i=0;i

完整代码:

#include
#include
#include
using namespace std;

const int maxn = 60,alpha = 26,maxt = 1e6+10,maxm = 5*1e5;
int ch[maxm][alpha],pc,f[maxm];
char s[maxn],str[maxt];
int flag[maxm];

void ins(char *s)
{
	int l = strlen(s),cur = 0;
	for(int i=0;i q;
	f[0] = 0;
	for(int c=0;c

 

你可能感兴趣的:(字符串)