HDU2222(AC自動機模板題)

2021-08-14 13:28:41 字數 1038 閱讀 1927

aho-corasick automaton,該演算法在2023年產生於貝爾實驗室,是著名的多模匹配演算法。

ac自動機是字典樹和kmp的結合。

可以解決的問題:給定多個單詞,再給乙個字串,問有多少個單詞在這個字串中出現過。

這個問題可以用kmp挨個串匹配,但是如果單詞數目多的話肯定會超時。

數中節點:

struct node;
sum統計以該字母結尾的單詞數目。fail指標相當於kmp中的next陣列。

具體可以看這篇文章,講的不錯:

題目:hdu2222

**:

#include #include #include #include #include using namespace std;

const int n = 10005;

const int l1 = 52;

const int l2 = 1000005;

struct node;

node *root;

queueq;

void init()

void insert(char *str)

tmp = tmp->next[x];

} tmp->sum++;

}void build()

else

p = p->fail;

}if(!p) tmp->next[i]->fail = root;

}q.push(tmp->next[i]);

} }}int ac_automation(char *str)

else

break;

tmp = tmp->fail;

} }return cnt;

}int main()

build();

scanf("%s", str2);

int cnt = ac_automation(str2);

printf("%d\n", cnt);

} return 0;

}

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 ...

HDU2222 AC自動機 入門模板

hdu 222 keywords search ac 自動機入門模板題 調了一下午 因為輸入最後乙個字串打成了 d還有兩處取反符號打錯 wa了無數次 血淚史 以後要注意 ac自動機思路 這個演算法的目的 用幾個給定的模式串去在乙個串 t 中匹配 簡單概括實現方式 1.對所有的模式串建trie樹。2....