AC日记——病毒侵袭持续中 hdu 3065
思路:
好题;
代码:
#include <queue>
#include <cstdio>
#include <cstring> using namespace std; #define maxn 50005
#define maxm 2000005 int ne[maxn][],fail[maxn],tag[maxn],n,len[],tot,ans[]; char ch[maxm],vi[][]; queue<int>que; int main()
{
int i,j,temp,now,pos;
while(scanf("%d",&n)!=EOF)
{
memset(ne,,sizeof(ne));
memset(ans,,sizeof(ans));
memset(tag,,sizeof(tag));
getchar(),tot=;
for(i=;i<=n;i++)
{
now=;
gets(vi[i]),len[i]=strlen(vi[i]);
for(j=;j<len[i];j++)
{
pos=vi[i][j]-'A';
if(!ne[now][pos]) ne[now][pos]=++tot;
now=ne[now][pos];
}
tag[now]=i;
}
que.push();
while(!que.empty())
{
now=que.front(),que.pop();
for(i=;i<;i++)
{
if(!ne[now][i]) continue;
else que.push(ne[now][i]);
if(now==) fail[ne[now][i]]=;
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]]=;
}
}
}
now=,gets(ch);int lit=strlen(ch);
for(i=;i<lit;i++)
{
pos=ch[i]-'A';
if(pos>=&&pos<)
{
if(ne[now][pos]) now=ne[now][pos];
else
{
temp=fail[now];
while(temp)
{
if(ne[temp][pos])
{
now=ne[temp][pos];
break;
}
temp=fail[temp];
}
if(!temp) now=;
}
}
else
{
now=;
continue;
}
temp=now;
while(temp)
{
ans[tag[temp]]++;
temp=fail[temp];
}
}
for(i=;i<=n;i++)
{
if(ans[i])
{
printf("%s: %d\n",vi[i],ans[i]);
}
}
}
return ;
}
AC日记——病毒侵袭持续中 hdu 3065的更多相关文章
- 病毒侵袭持续中 HDU - 3065 AC自动机
小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒 ...
- 病毒侵袭持续中 - HDU 3065(AC自动机,判断子串个数)
分析:依然是一个模板题,不过在写建立失败指针的地方竟然写错了三次....看来现在状态不太好. 代码如下: ============================================= ...
- AC自动机---病毒侵袭持续中
HDU 3065 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/C Description 小t ...
- 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 病毒侵袭持续中
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 病毒侵袭持续中 (模板题)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
随机推荐
- [C/C++] C++中new的语法规则
int *x = new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) ); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 ...
- BZOJ4476 送礼物
这道题真是有趣呀. 其实就是一个分数规划问题,用一个二分加log来得去掉分母. 分四种情况讨论 1.lenth > L && num ( max ) > num ( min ...
- 【题解】ZJOI2013蚂蚁寻路
这题强呀……打了10+30暴力之后苦想1h并不会做……于是去看题解.看题解的时候又莫名各种看错,结果看了好久才懂……记录一下血泪史吧. 这题不难发现走出来的图形就是一个高低高低的城堡型图案,命名为高峰 ...
- [洛谷P2384]最短路
题目大意:给你一个图,要你求出其中1->n路径中乘积最小的一条路 题解:用$log_2$把乘法变成加法,然后记录每个点的前驱,最后求出答案 C++ Code: #include<cstdi ...
- BZOJ1559 [JSOI2009]密码 【AC自动机 + 状压dp】
题目链接 BZOJ1559 题解 考虑到这是一个包含子串的问题,而且子串非常少,我们考虑\(AC\)自动机上的状压\(dp\) 设\(f[i][j][s]\)表示长度为\(i\)的串,匹配到了\(AC ...
- 禁止 iphone 网页上下拖动露底
document.addEventListener('touchmove', function(e) { e.preventDefault();});
- HDU4725:The Shortest Path in Nya Graph(最短路)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- ACM模板~求第k短路 ~~~A*+Dijkstra
#include <map> #include <set> #include <cmath> #include <ctime> #include < ...
- VC关于置顶窗口的方法小结
转摘自:http://blog.csdn.net/wirror800/article/details/4002381 将窗体置顶的方法有: //将窗体置顶的API函数 ::SetWindowPos(m ...
- eclipse调试java技巧
详细内容请看: http://www.oschina.net/question/82993_69439