struct AhoCorasickAutomaton
{
static const int alp=26;
static int to_idx(char ch)
{
return ch-'a'+1;
}
struct Trie
{
static const int __=1000005;
struct node
{
int nex[alp+1],last,num;
bool add[alp+1];
void clear()
{
num=last=0;
mem(nex,0);
mem(add,false);
}
}t[__];
Trie() {clear();}
node& operator[](int x){return t[x];}
int idx;
void insert(char s[],int len)
{
int x=0;
for(int i=1;i<=len;++i)
{
int k=to_idx(s[i]);
if(!t[x].nex[k])
{
t[x].nex[k]=++idx;
t[idx].clear();
}
x=t[x].nex[k];
}
//標(biāo)記結(jié)尾
}
void clear(){idx=0;t[0].clear();}
}t;
AhoCorasickAutomaton() {clear();}
#define nex(x) t[x].nex[i]
#define fail(x) t[x].nex[0]
void get_fail()
{
queue<int>Q;Q.push(0);
while(!Q.empty())
{
int x=Q.front();Q.pop();
for(int i=1;i<=alp;++i)
if(nex(x))
{
Q.push(nex(x));
// for(int y=x;y;y=fail(y))
// if(nex(fail(y)))
// {
// fail(nex(x))=nex(fail(y));
// break;
// }
if(x)fail(nex(x))=nex(fail(x));
}
else
{
nex(x)=nex(fail(x));
t[x].add[i]=true;
}
if(t[fail(x)].num)t[x].last=fail(x);
else t[x].last=t[fail(x)].last;
}
}
int ac(char s[],int len)
{
int ans=0;
for(int i=1,x=0;i<=len;++i)
{
int k=to_idx(s[i]);
// while(x && !t[x].nex[k])x=fail(x);
x=t[x].nex[k];
for(int y=x;y;y=t[y].last)
;//統(tǒng)計(jì)答案
}
return ans;
}
void debug()
{
for(int i=0;i<=t.idx;++i)
{
pf("t[%d]: fail:%d last:%d\n",i,fail(i),t[i].last);
for(int j=1;j<=26;++j)
if(t[i].nex[j])
printf("%d(%c) ",t[i].nex[j],j-1+'a');
puts("\n");
}
}
void clear(){t.clear();}
}aca;
AC自動(dòng)機(jī)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赌厅,“玉大人穷绵,你說我怎么就攤上這事√卦福” “怎么了仲墨?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長揍障。 經(jīng)常有香客問我目养,道長,這世上最難降的妖魔是什么毒嫡? 我笑而不...
- 正文 為了忘掉前任癌蚁,我火速辦了婚禮,結(jié)果婚禮上兜畸,老公的妹妹穿的比我還像新娘努释。我一直安慰自己,他們只是感情好膳叨,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菲嘴,像睡著了一般饿自。 火紅的嫁衣襯著肌膚如雪龄坪。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼炬搭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宫盔?” 一聲冷哼從身側(cè)響起融虽,我...
- 序言:老撾萬榮一對(duì)情侶失蹤有额,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后姿鸿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡苛预,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年热某,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胳螟。...
- 正文 年R本政府宣布嘉竟,位于F島的核電站邦危,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舍扰。R本人自食惡果不足惜倦蚪,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望边苹。 院中可真熱鬧陵且,春花似錦、人聲如沸个束。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沪悲,卻和暖如春售睹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背可训。 一陣腳步聲響...
- 正文 我出身青樓飞崖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谨胞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子固歪,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 文不達(dá)意,口齒不清胯努,思想混亂牢裳,令人噴飯。(估計(jì)只有我自己才能看懂我在說什么)簡書沒有mathjax公式?jīng)]法愉快顯示...
- DNA Sequence題意:有m種DNA序列是有疾病的叶沛,問有多少種長度為n的DNA序列不包含任何一種有疾病的DN...
- AC自動(dòng)機(jī)學(xué)習(xí)記錄 參考資料 字典樹(講解+模版)AC自動(dòng)機(jī)算法AC自動(dòng)機(jī)算法詳解hdu 2222 ac自動(dòng)機(jī)入門...
- 類似于week2,3蒲讯;然后這一節(jié)題目說是Trie圖,其實(shí)用AC自動(dòng)機(jī)更容易搜出來結(jié)果灰署。對(duì)于一個(gè)M<=10^6的字符...
- AC自動(dòng)機(jī): 求多個(gè)字符串是否在主串中出現(xiàn)過判帮。可依據(jù)情況分別求出出現(xiàn)次數(shù)溉箕,出現(xiàn)位置等晦墙。 AC自動(dòng)機(jī)入門Keywor...