題目鏈結:
題目大意:多個模式串。多個匹配串。其中串的字元範圍是(0~127)。問匹配串中含有哪幾個模式串。
解題思路:
ac自動機模板題。注意一下字元範圍。
cnt記錄這個模式串的個數改為這個模式串的index。
find的時候,把找到的index壓入vector裡面即可。
注意有多個匹配串,每次find之後會把last->cnt修改,原因是防止乙個模式串出現了多次被壓入vector,所以先備份一下,再還原回來。
#include "cstdio
"#include
"cstring
"#include
"string
"#include
"iostream
"#include
"queue
"#include
"vector
"#include
"algorithm
"using
namespace
std;
#define maxn 130
struct
trie
*root;
struct
status
};trie *newnode()
void init()
void insert(string str,int
index)
pos->cnt=index;
}void
getfail()
else root->next[c]=root;
}while(!q.empty())
else x->next[c]=x->fail->next[c];}}
}vector
find(string
str)}}
while(!q.empty()) //
恢復last->cnt
return
ans;
}int
main()
getfail();
cin>>m;
int cnt=0
;
for(int i=1;i<=m;i++)
printf(
"total: %d\n
",cnt);
}}
2871595
neopenx
hdu2896
accepted
29988
343c++
2565
9 min ago
hdu2896 AC自動機模板)
ac自動機模板題 下面說幾個注意點 1 題目中說字元是可見字元,可見字元的asc碼是32 127 由於不清楚這一點wa了無數次 2 發現ac自動機網上 都是用指標來寫的,我這裡提供靜態陣列的寫法 如下 include include include include include include i...
HDU2896 AC自動機 模板
思路 因為不同病毒特徵碼不會相同。ac自動機,然後對於每乙個輸出即可。注意 以上字串中字元都是ascii碼可見字元 不包括回車 g mle。include include include include include includeusing namespace std const int n 1...
hdu 2896 AC自動機模版題
題意 輸出出現模式串的id,還是用end記錄id就可以了。本題有個關鍵點 以上字串中字元都是ascii碼可見字元 不包括回車 也就說ac自動機的trie樹需要128個單詞分支。include include include using namespace std const int maxw 210...