HDU2222 AC自動機 入門模板

2021-08-01 18:41:37 字數 1224 閱讀 5108

hdu 222 keywords search

ac 自動機入門模板題

調了一下午

因為輸入最後乙個字串打成了%d還有兩處取反符號打錯 wa了無數次

血淚史 以後要注意

ac自動機思路:

這個演算法的目的:用幾個給定的模式串去在乙個串 t 中匹配

簡單概括實現方式:

1.對所有的模式串建trie樹。

2.從根節點開始建立fail指標。基本的邏輯如下:

buildfail(node root)

3.匹配過程:看**吧= = = = = = = = =

#include

#include

#include

#include

#include

using

namespace

std;

int t,n;

class trie

};inline

int getid(char t)

int len,id;trie *p;

void inserttrie(char * pat,trie * root)

p->cnt++;

return ;

}queue

q;trie * temp;

void buildfail(trie * root)

p=p->fail;

}if(!p) temp->nxt[i]->fail=root;

}q.push(temp->nxt[i]);

}

}return ;

}int ans=0;

int acmatch(char * str,trie * root)

}return ans;

}void datain()

buildfail(root);

scanf("%s",buf);

printf("%d\n",acmatch(buf,root));

}}int main()

hdu 2222 ac自動機模版

include include structnode q 1000010 charss 1010 s 55 voidinsert chars,node root p num voidacmove node root p p fail if p null now next i fail root q ...

hdu 2222 ac自動機模板

題意 題意 給出n個串,然後給一篇文章,問這n個串有多少個在文章裡面出現過。trick n個串可能有相同的,需按照不同串處理。剛學ac自動機,沒學明白,這 也是照著別人部落格寫的,弱爆 include include include include include using namespace s...

hdu2222 (AC自動機模板)

題 學習出 主要是fail的建立。在跳的過程就是不斷跳fail,而不是跳到乙個fail再往下!include include include include include using namespace std typedef long long ll const int m 2e6 6 int ...