ac 自動機 模版 原文匹配查詢時講錯了,其他都挺好(原文博主知錯懶得改
t個樣例,n個單詞,乙個文字串,求文字串中單詞出現的次數。 若給出單詞ab,ab 文字ab,匹配數為2
若給出 n個不重複的單詞和乙個文字,問單詞的出現次數,則cntword[j]不置-1,且迴圈條件變為 j !=0。
如單詞aa , bb cc. 串ooxxcc%daaaoen....end,則串 aa出現2次, cc出現 1次
#include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int maxn = 1e6+9;
int trie[maxn][26]; //字典樹
int cntword[maxn]; //記錄該單詞出現次數
int fail[maxn]; //失敗時的回溯指標
int cnt = 0;//結點個數
void insertwords(char s,int len)
}//fail[now] ->當前節點now的失敗指標指向的地方
tire[now][i] -> 下乙個字母為i+'a'的節點的下標為tire[now][i]
while(!q.empty()) else //否則就讓當前節點的這個子節點
//指向當前節點fail指標的這個子節點
trie[now][i] = trie[fail[now]][i];
} }}int query(char s,int len)
} return ans;
}int main()
fail[0] = 0;
getfail();
scanf("%s",s);//查詢文字串
cout << query(s,strlen(s)) << endl;
} return 0;}/*
4ash shex bcd sha
ashex
*/
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 ...