作者:手机用户2502937527 | 来源:互联网 | 2024-12-14 17:53
病毒特征检测 - AC自动机应用
时间限制: 2000/1000 MS (Java/Other) 内存限制: 32768/32768 K (Java/Other)总提交次数: 5260 通过提交次数: 1874问题描述
在解决上一个问题后,小T发现网络中存在一个大型的病毒源站,该站点含有多种病毒,其特征码仅由大写字母组成。为了有效应对这一威胁,小T需要统计出该网站中不同病毒的数量及其出现的频次。请帮助小T完成这项任务。
输入
第一行输入一个整数N(1≤N≤1000),代表病毒特征码的数量。接下来N行,每行给出一个病毒特征码,长度在1到50之间,且仅含大写字母。所有病毒特征码互不相同。随后一行提供目标文本,长度不超过2000000,由ASCII可见字符组成(不含回车)。
输出
按照病毒特征码的输入顺序,每行输出一个病毒及其出现次数,格式为:“病毒特征码: 出现次数”,若某病毒未出现,则无需输出。
样例输入
3
AA
BB
CC
ooxxCC%dAAAoen....END
样例输出
AA: 2
CC: 1
提示
考虑所有未在题目描述中提及的情况,如病毒特征码之间的相互包含或部分重叠。具体的计数规则可以从样例中推断。
解题思路
此题为典型的多模式匹配问题,适合使用AC自动机(Aho-Corasick算法)来解决。通过构建AC自动机,可以高效地在一个长文本中查找多个模式串。具体实现时,首先根据给定的病毒特征码构建AC自动机,然后遍历目标文本,利用AC自动机统计各模式串的出现次数。