HDU 3065 病毒侵袭持续中 (模板题)
病毒侵袭持续中
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 21842 Accepted Submission(s): 6968
接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。
在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。
病毒特征码: 出现次数
冒号后有一个空格,按病毒特征码的输入顺序进行输出。
Hit:
题目描述中没有被提及的所有情况都应该进行考虑。比如两个病毒特征码可能有相互包含或者有重叠的特征码段。
计数策略也可一定程度上从Sample中推测。
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<queue>
#define N 2000006
using namespace std;
int tree[N][],vis[N],ans[N],last[N],fail[N];
int n,id,root,num=;
string s[],ss; void insert(int x)
{
root=;
for(int i=;s[x][i];i++)
{
id=s[x][i];
if(tree[root][id]==)
{
tree[root][id]=++num;
memset(tree[num],,sizeof(tree[num]));
vis[num]=;
}
root=tree[root][id];
}
vis[root]=x;
} void build()
{
queue<int>p;
fail[]=;
for(int i=;i<;i++)
{
if(tree[][i]!=)
{
fail[tree[][i]]=;
last[tree[][i]]=;
p.push(tree[][i]);
}
}
while(!p.empty())
{
root=p.front();
p.pop();
for(int i=;i<;i++)
{
if(tree[root][i]==)
{
tree[root][i]=tree[fail[root]][i];
continue;
}
p.push(tree[root][i]);
int temp=tree[root][i];
int fa=fail[root];
fail[temp]=tree[fa][i];
last[temp]=(vis[fail[temp]]?fail[temp]:last[fail[temp]]);
}
}
} void count(int x)
{
if(x!=)
{
ans[vis[x]]++;
count(last[x]);
}
} void search()
{
root=;
for(int i=;ss[i];i++)
{
id=ss[i];
while(root&&tree[root][id]==)
root=fail[root];
root=tree[root][id];
if(vis[root])
count(root);
else if(last[root])
count(last[root]);
}
}
int main()
{
while(cin>>n)
{
num=;
memset(tree[],,sizeof(tree[]));
memset(ans,,sizeof(ans));
fail[]=vis[]=last[];
for(int i=;i<=n;i++)
{
cin>>s[i];
insert(i);
}
build();
ss.clear();
cin>>ss;
search();
for(int i=;i<=n;i++)
{
if(ans[i]!=)
cout<<s[i]<<": "<<ans[i]<<endl;
}
}
return ;
}
HDU 3065 病毒侵袭持续中 (模板题)的更多相关文章
- HDU 3065 病毒侵袭持续中
HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 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 病毒侵袭持续中(AC自动机 模板)题解
题意:给出主串中每个模式串的个数 思路:毒瘤出题人多组数据没说给的是多组数据. 板子: struct Aho{ struct state{ int next[130]; int fail, cnt; ...
- 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> ...
随机推荐
- I/O-<File区别>
FileInputStream FileOutputStream ObjectInputStream ObjectOutputStream 传的是对象 需要新建一 ...
- NFS网络文件共享系统!
NFS是运行在应用层上的协议,其默认的端口为2049,它适用于linux与linux之间,也适用于linux与unix之间,亦可适用于linux与windows之间 nfs优缺点优点 节省本地硬盘的存 ...
- BugkuCTF解题Web基础(一)
Web2 打开链接看见一张动图,猜测flag应该就在网页前端源码里面 没有问题 计算器 典型的修改前端代码题目,题目让你计算结果,但只能填写一位数字. f12打开控制台,改代码maxlength we ...
- crm系统和e_store商场的比较总结
e_store用了:Java.Servlet.JSP.Oracle.JQuery.Mybatis,tomcat技术 crm用了 :Java.JSP.Oracle.JQuery,Mybatis,spri ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:管理控制文件和日志文件
alter database add logfile ('D:\OracleFiles\LogFiles\REDO4_A.LOG', 'E:\OracleFiles\LogFiles\REDO4_B. ...
- Markdown中实现折叠代码块
<details> <summary>展开查看</summary> <pre><code> System.out.println(" ...
- Flask - 多APP应用(不太重要)
1. 多APP应用 请求进来时,可以根据URL的不同,交给不同的APP处理.一般用蓝图也可以实现.一般不写多app应用. from werkzeug.wsgi import DispatcherMid ...
- Node.js之EventEmiter
参考: 1. Node.js之EventEmiter讲解 2. Node.js之events事件 3. 在线运行node.js代码 Node.js主要API使用异步事件驱动模型,异步I/O操作完成时, ...
- VBS 脚本对象
Dictionary对象(1) 1. 属性: a) compareMode b) count c) key d) item 2. ...
- 暑假周进度报告(三)-------版本过高后续问题处理,eclipse编译运行MapReduce以及Hadoop学习
问题一:Hadoop版本太高 卸载Hadoop3.2.0 我改安装了Hadoop 2.7.7 如果没有权限下载.可以采用如下方式: 卸载完成以后返回原目录即可 后面的jdk卸载也可以采用这种方式. 按 ...