HDU 3065 病毒侵袭持续中
HDU 3065 病毒侵袭持续中
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description - 题目描述
小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家能再帮帮他吗?
|
Input - 输入 |
Output - 输出 |
|
第一行,一个整数N(1<=N<=500),表示病毒特征码的个数。 |
按以下格式每行一个,输出每个病毒出现次数。未出现的病毒不需要输出。 |
|
Sample Input - 输入样例 |
Sample Output - 输出样例 |
|
3 |
AA: 2 |
Hint - 提示
题目描述中没有被提及的所有情况都应该进行考虑。比如两个病毒特征码可能有相互包含或者有重叠的特征码段。
计数策略也可一定程度上从Sample中推测。
【题解】
每次匹配的时候不清除即可,一般的AC自动机,坑点是多组输入,以及眼神不好……
【代码 C++】
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
int tr[][], iTR, fail[], sWord[], cnt[];
char word[][], text[];
int n;
void build(){
memset(tr, , sizeof(tr)); memset(fail, , sizeof(fail));
memset(cnt, , sizeof(cnt)); memset(sWord, , sizeof(sWord));
iTR = ;
int i, j, k, w; for (i = ; i <= n; ++i){
gets(word[i]);
for (j = k = ; word[i][j]; ++j){
w = word[i][j] - 'A';
if (!tr[k][w]) tr[k][w] = ++iTR;
k = tr[k][w];
}
cnt[k] = i;
}
}
void setFail(){
std::queue<int> q;
int i, j, now;
for (i = ; i < ; ++i) if (tr[][i]) q.push(tr[][i]);
while (!q.empty()){
now = q.front(); q.pop();
for (i = ; i < ; ++i){
if (j = tr[now][i]) q.push(j), fail[j] = tr[fail[now]][i];
else tr[now][i] = tr[fail[now]][i];
}
}
}
void fid(){
gets(text);
int i, j, temp;
for (i = j = ; text[i]; ++i){
if (text[i] < 'A' || 'Z' < text[i]){ j = ; continue; }
j = tr[j][text[i] - 'A'];
for (temp = j; temp; temp = fail[temp]) ++sWord[cnt[temp]];
}
}
void opt(){
for (int i = ; i <= n; ++i){
if (sWord[i]) printf("%s: %d\n", word[i], sWord[i]);
}
}
int main(){
while (~scanf("%d", &n)){
getchar();
build(); setFail(); fid();
opt();
}
return ;
}
HDU 3065 病毒侵袭持续中的更多相关文章
- hdu 3065病毒侵袭持续中
病毒侵袭持续中 http://acm.hdu.edu.cn/showproblem.php?pid=3065 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 3065 病毒侵袭持续中(AC自己主动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...
- hdu 3065 病毒侵袭持续中【AC自动机】
<题目链接> 题目大意: 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是 ...
- HDU 3065 病毒侵袭持续中 (AC自动机)
题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...
- HDU 3065 病毒侵袭持续中 (模板题)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 3065 病毒侵袭持续中(AC自动机(每个模式串出现次数))
http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:求每个模式串出现的次数. 思路: 不难,把模板修改一下即可. #include<iostrea ...
- hdu 3065病毒侵袭持续中(ac自动机)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3065 中文题题意不解释了. 依旧稍微改一下ac自动机模版就能过了.还有一个坑点!是多组数据!!! #i ...
- HDU 3065 病毒侵袭持续中(AC自动机)
这题数据太水,一开始没有加上Get的方法也能AC..话说AC自动机中一定要注意加上Get的方法!(不然,同一个后缀的其他单词就没被算上了.) 代码如下: #include <stdio.h> ...
- HDU 3065 病毒侵袭持续中(AC自动机)题解
题意:要你找到主串中每个模式串的个数. 思路:题目都没说是多组数据,结果没while(~)直接WA了,和上一题差不多,可以用map或者开个数组储存.指针要记得回收内存,不然MLE. #include& ...
随机推荐
- [转]Delphi多线程编程入门(一)
最近Ken在比较系统地学习Delphi多线程编程方面的知识,在网络上查阅了很多资料.现在Ken将对这些资料进行整理和修改,以便收藏和分享.内容基本上是复制粘贴,拼拼凑凑,再加上一些修改而来.各个素材的 ...
- uploadify3.2.1加载时,报NetworkError 404 Not Found或NetworkError forbidden错误
我用的uploadify的版本是3.2.1 在打开配置了uploadify的页面的时候,什么操作都没有,仅仅是打开了页面,在火狐里可以看到一行报错信息,我的uploadify页面 在"/项目 ...
- !important------至高无上的宝剑
如上图,不同来源的两个样式,第一个样式设置了font-weight,第二个没有,浏览器会把它叠加在一起,即浏览器会把各个零散的整合成一个整体.第一个样式color:red,第二个样式color:blu ...
- 空格和TAB键混用错误:IndentationError: unindent does not match any outer indentation level
转自:http://www.crifan.com/python_syntax_error_indentationerror/comment-page-1/ [已解决]Python脚本运行出现语法错误: ...
- composer 报 zlib_decode(): data error
使用composer 时报 zlib_decode(): data error 错误. 解决办法:执行 composer self-update 即可
- 为什么anylase和scenaio中的平均响应时间差别会这么大?
场景里的响应时间截图如下所示: 结果里的响应时间截图如下所示:
- 使用PowerDesigner生成Access数据库
PowerDesigner生成Access数据库 自从使用PD以来一直知道可以支持access但一直没有搞明白如何通过脚本来创建access数据表.在PD的tools里终于找到的答案,具体 文件都在C ...
- require()与 require_once()、 include与include_once()
- Linux中PHP如何安装curl扩展方法
如果php已经在系统编译好,后来又需要添加新的扩展. 一种方式就是重新完全编译php,另一种方式就是单独编译扩展库,以extension的形式扩展. 下面以安装curl扩展为例: 1.下载curl安装 ...
- ACM题目————一笔画问题
描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整数N(N< ...