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& ...
随机推荐
- autohotkey-【GUI】Switch between Windows of the Same Application
下面给出了ahk的脚本,但我需要GUI http://superuser.com/questions/435602/shortcut-in-windows-7-to-switch-between-sa ...
- windows cmd color setup
设置颜色的话,一般可定会有foreground和background color设置:(其实color /?直接看一下就好了) Color Background Foreground Black 0 ...
- Array JSON
Tool: Online jsonviewer JSON: JavaScript Object Notation. JSON is a syntax for storing and exchangin ...
- maven打包异常
maven打包异常,如图: 问题原因:服务器密码错了.
- jquery.rotate.js库中的rotate函数怎么用。
rotate是jQuery旋转rotate插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .Opera 9 .Google Chrome,高级浏览 ...
- destoon 会员整合Ucenter/Discuz!/PHPWind教程
首先进入 Destoon网站后台 -〉会员管理 -〉模块设置 -〉会员整合 假如需要整合的主站地址为 http://www.abc.com 论坛为 http://bbs.abc.com 1.整合Uce ...
- Greenplum的全量备份之gpcrondump
gpcrondump是对gp_dump的一个包装,可以直接调用或者从crontab中调用.这个命令还允许备份除了数据库和数据之外的对象,比如数据库角色和服务器配置等. gpcrondump 常用到的参 ...
- C++Lua配置
1.先从lua官网下载lua新版本http://www.lua.org/,我这里以lua-5.3.0.tar.gz为例,大小不到300kb 2.解压后出现如下图 3.在vs2013新建工程静态库类型( ...
- 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)
转载注明原地址:http://blog.csdn.net/nk_test/article/details/49497017 少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯 ...
- Apache Common-pool2对象池分析和应用
Apache Common-pool2包提供了一个通用的对象池技术的实现.可以很方便的基于它来实现自己的对象池,比如DBCP和Jedis他们的内部对象池的实现就是依赖于Common-pool2. 对象 ...