AC日记——病毒侵袭 hdu 2896
思路:
好题;
代码:
#include <queue>
#include <cstdio>
#include <cstring> using namespace std; #define maxn 100001 int ne[][],tag[],fail[],n,tot,m,ans; char ch[maxn]; bool vis[],out,sc[]; queue<int>que; int main()
{
int i,j,len,now,temp;
scanf("%d",&n);
tot=,ans=;getchar();
for(i=;i<=n;i++)
{
gets(ch);
len=strlen(ch);
now=;
for(j=;j<len;j++)
{
if(!ne[now][ch[j]]) ne[now][ch[j]]=++tot;
now=ne[now][ch[j]];
}
tag[now]=i;
}
que.push();
while(!que.empty())
{
now=que.front();que.pop();
for(i=;i<;i++)
{
if(!ne[now][i]) continue;
if(now==) fail[ne[now][i]]=now;
else
{
temp=fail[now];
while(temp)
{
if(ne[temp][i])
{
fail[ne[now][i]]=ne[temp][i];
break;
}
temp=fail[temp];
}
if(!temp) fail[ne[now][i]]=;
}
que.push(ne[now][i]);
}
}
scanf("%d",&m);getchar();
for(i=;i<=m;i++)
{
out=false;
for(j=;j<=n;j++) sc[j]=false;
for(j=;j<;j++) vis[j]=false;
gets(ch);
len=strlen(ch),now=;
for(j=;j<len;j++)
{
if(ne[now][ch[j]]) now=ne[now][ch[j]];
else
{
temp=fail[now];
while(temp)
{
if(ne[temp][ch[j]])
{
now=ne[temp][ch[j]];
break;
}
temp=fail[temp];
}
if(!temp) now=;
}
temp=now;
while(!vis[temp])
{
vis[temp]=true;
if(!sc[tag[temp]]&&tag[temp]) out=true,sc[tag[temp]]=true;
temp=fail[temp];
}
}
if(out)
{
printf("web %d:",i);
for(j=;j<=n;j++) if(sc[j]) printf(" %d",j);
printf("\n"),ans++;
}
}
printf("total: %d\n",ans);
return ;
}
AC日记——病毒侵袭 hdu 2896的更多相关文章
- 病毒侵袭 - HDU 2896(AC自动机)
分析:有点需要注意的,输入的字符是所有可见的ASCII码,刚开始没看清一直以为是小写字母.............注意到这点后这题就是裸的自动机了. 代码如下: ================= ...
- 病毒侵袭 HDU - 2896(ac自动机 板题)
当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~ 但网路上总有那么些网站,开 ...
- AC日记——病毒侵袭持续中 hdu 3065
3065 思路: 好题: 代码: #include <queue> #include <cstdio> #include <cstring> using names ...
- 病毒侵袭 HDU - 2896 板子题
当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~ 但网路上总有那么些网站,开 ...
- AC自动机---病毒侵袭持续中
HDU 3065 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/C Description 小t ...
- AC自动机---病毒侵袭
HDU 2896 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/B Description 当太 ...
- AC日记——Keywords Search hdu 2222
2222 思路: ac自动机模板题: 代码: #include <cstdio> #include <cstring> #include <iostream> #i ...
- AC日记——Number Sequence hdu 1711
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- AC日记——统计难题 hdu 1251
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
随机推荐
- SQL select 和SQL where语句
一.SQL SELECT语句 用于从表中选取数据,结果被存储在一共结果表中(称为结果集) 1.语法: SELECT 列名称 FROM 表名称 以及: SELECT * FROM 表名称 注:SQ ...
- php静态文件缓存示例
//开始缓冲区 ob_start(); $cache_file = "./cache/4.3-static.html"; $cache_time = 1; //设置缓存更新时间 i ...
- Struts1文件上传
package org.zln.struts.domain; import org.apache.struts.upload.FormFile; /** * Created by sherry on ...
- js生成图片
var image = new Image(); var c = document.getElementById("myCanvas"); var ctx = c.getConte ...
- codeforces 1015C
C. Songs Compression time limit per test 1 second memory limit per test 256 megabytes input standard ...
- oralce的客户端sqlplus
安装完oracle后,默认的客户端是sqlplus,还有一个公司常用的是PLSQLdeveloper 客户端软件,另外Navicat primie这个可以连接mysql.sqlserver.oracl ...
- jquery和ajax,json写法的说明
一: 在ajax中,如果没有用jquery,则如xmlHttpRequest.open("POST", "AjaxServlet", true); (1)如果用 ...
- shell 灵活设置定时任务
#!/bin/bash step=30 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do curl #调用链接 sleep $step ...
- 校内训练0609 problem c
[题目大意] 给一棵树,求有多少条路径满足总和-最大值 是P的倍数 n<=10^5, P<=10^7 [题解] 一看就是点分治嘛 不考虑子树合并,考虑poj1741的做法,每次考虑经过重心 ...
- COGS2090 Asm.Def找燃料
时间限制:1 s 内存限制:256 MB [题目描述] “听说咱们要完了?”比利·海灵顿拨弄着操纵杆,头也不回地问Asm.Def. “不要听得风就是雨.” “开个玩笑嘛.不就是打机器人,紧张啥,你 ...