沒啥好說的。**注釋,可以秒懂
//照打的。跟模板的差別是引入了used陣列和乙個flag標記
#include #include
#include
using
namespace
std;
const
int maxn = 510*200
;int ch[maxn][128
],fail[maxn],end[maxn];
introot,sz,cnt;
char str[10010
];bool used[510
];int
newnode()
void
init()
void insert(char *str,int
id) end[now] = id;//
記錄當前單詞的id
}void
getfail()
}while(!q.empty())
else
}}}//
傳入的id是為了輸出時的方便
void query(char *str,int
id)
*///
在這裡行不通,因為為了避免重複把標記改動了,對另外乙個單詞進行查詢的時候就出錯
while(tmp !=root)
tmp =fail[tmp];}}
//表示在此串中存在單詞
if(flag)
printf("\n
");}
}int
main()
getfail();
cnt = 0
; scanf("%d
",&m);
for(int i = 1;i <= m;i++)
printf(
"total: %d\n
",cnt);
return0;
}
hdu 2896 AC自動機模版題
題意 輸出出現模式串的id,還是用end記錄id就可以了。本題有個關鍵點 以上字串中字元都是ascii碼可見字元 不包括回車 也就說ac自動機的trie樹需要128個單詞分支。include include include using namespace std const int maxw 210...
hdu2896 病毒侵襲
剛剛看完ac自動兩天就發現了這道自動機的題目,這題不是很難,但是有幾個細節需要注意一下,首先 中的病毒型別不能重複,也就是說沒有可能出現兩個同樣的病毒,我的處理方法是利用set這樣的話判重和排序都省了,其次輸出的 編號和最終的病毒 數不是一樣的 我就是卡在這裡一直wa 爆棧的童鞋記得size是128...
HDU 2896 病毒侵襲
那什麼可見字元是坑爹的吧 include include include include include include include include include include include include include include include include include i...