各种MLE,这模板感觉有问题,next数组开128也会MLE,实际上可见字符为编号32~126,只用开100就行。

 #include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <queue>
#pragma warning ( disable : 4996 )
using namespace std; inline int Max(int a,int b) { return a>b?a:b; }
inline int Min(int a,int b) { return a>b?b:a; }
const int inf = 0x3f3f3f3f;
const int maxn = 1e6+;
const int maxk = ; int N, M, tot;
int ans[];
char str[], test[]; struct node {
node* next[maxk];
node* fail;
int code;
bool end;
node() {
memset( next, NULL, sizeof(next) );
fail = NULL;
code = ; end = false;
}
}; void insert( node* root, int x )
{
node* p = root;
int len = strlen(str);
int tmp; for ( int i = ; i < len; i++ )
{
tmp = str[i]-;
if ( p->next[tmp] == NULL )
p->next[tmp] = new node();
p = p->next[tmp];
p->code = x;
}
p->end = true;
} void getnotfail( node* root )
{
queue<node*> q;
root->fail = NULL;
q.push(root);
while (!q.empty())
{
node *run= q.front(); q.pop();
node *tmp = NULL;
for ( int i = ; i < maxk; i++ )
{
if ( run->next[i] )
{ //如果节点是初始节点,则它的子节点的失败指针全部指向root
if(run==root) run->next[i]->fail = root;
else
{
tmp = run->fail; //tmp为它的父节点的上层节点
while (tmp)
{
if(tmp->next[i]) //寻找tmp的第i个子节点,如果存在,则run的fail指针指向它
{ run->next[i]->fail = tmp->next[i]; break; }
tmp = tmp->fail;
}
if(tmp==NULL)
run->next[i]->fail = root;
}
q.push(run->next[i]);
}
}
}
} int query( node* r )
{
int cnt = ;
int len = strlen(test);
node* p = r;
for ( int i = ; i < len; i++ )
{
int x = test[i]-;
while (!p->next[x]&&p!=r) p = p->fail; p = p->next[x];
if (!p) p = r;
node *tmp = p; while (tmp!=r&&tmp->end)
{
ans[cnt++] = tmp->code;
tmp = tmp->fail;
}
}
return cnt;
} int main()
{ while ( ~scanf("%d", &N ))
{
node* r = new node; for ( int i = ; i <= N; i++ )
{ scanf("%s", str); insert(r, i); }
getnotfail(r);
cin >> M; for ( int i = ; i <= M; i++ )
{
scanf( "%s", test );
int num = query(r);
if (num)
{
sort(ans, ans + num);
printf( "web %d:", i );
for ( int j = ; j < num; j++ )
printf(" %d", ans[j]);
cout << endl;
tot++;
memset( ans, , sizeof(ans) );
}
}
printf("total: %d\n", tot);
}
return ;
}

HDU2896 病毒侵袭 AC自动机模板的更多相关文章

  1. HDu-2896 病毒侵袭,AC自动机模板题!

    病毒侵袭 模板题,不多说了.. 题意:n个不同的字符串分别代表病毒特征,给出m次查询,每次一个字符串(网址),求这个字符串中有几个病毒特征,分别从大到小输出编号,最后输出所有的带病毒网址个数.格式请看 ...

  2. hdu2896 病毒侵袭 AC自动机入门题 N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,

    /** 题目:hdu2896 病毒侵袭 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:N(N <= 500)个长度不大于200的模式串 ...

  3. HDU2896 病毒侵袭 —— AC自动机

    题目链接:https://vjudge.net/problem/HDU-2896 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  4. hdu2896 病毒侵袭 ac自动机

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...

  5. hdu2896病毒侵袭(ac自动机)

    链接 ac自动机的模板题 说2个注意的地方 一是题目说明包含所有ASCII字符,可以开到0-127 包含空格 题目会输入多个源串,在加完当前的val值时,不应清0,可以开个标记数组. #include ...

  6. hdu 2896 病毒侵袭 ac自动机

    /* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...

  7. hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 【HDU2896】病毒侵袭 AC自动机

    [HDU2896]病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年 ...

  9. hdu 2896 病毒侵袭 AC自动机 基础题

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

随机推荐

  1. R:ggplot2数据可视化——进阶(2)

    Part 2: Customizing the Look and Feel, 更高级的自定义化,比如说操作图例.注记.多图布局等  # Setup options(scipen=999) librar ...

  2. <小知识>记录

    lis = [2,3,"k",["qwe",20,["k1",["tt",3,"1"]],89],& ...

  3. (转)行为树(Behavior Tree)实践(1)– 基本概念

    通过一个例子来介绍一下行为树的基本概念,会比较容易理解,看下图: 这是我们为一个士兵定义的一颗行为树(可以先不管这些绿圈和红圈是干吗的),首先,可以看到这是一个树形结构的图,有根节点,有分支,而且子节 ...

  4. 【学术篇】SPOJ-DISQUERY

    一道傻逼链剖我TM总共差不多写了一小时,调了将近一天!!!!!! 题目传送门:http://www.spoj.com/problems/DISQUERY/ 嗯,偷偷递小广告:SPOJ是个挺好的OJ ( ...

  5. windows10 家庭版 无法远程2012的解决

    windows 10安装最新补丁后无法远程windows server 2008.2012服务器 报错信息如下:出现身份验证错误,要求的函数不受支持  可能是由于CredSSP加密Oracle修正. ...

  6. postgresql数据库安装后的pgadmin4中无法加载本地连接解决办法

    postgresql 在安装最后一步提示the database cluster initialisation failed, 而后点开pgadmin4发现如下图所示 经过百度搜索找出问题原因, 由于 ...

  7. 0903NOIP模拟测试赛后总结

    分-rank33.这次考试心态挂了. 拿到题目通读三道题,发现都十分恶心. 然后把时间押到了T1上.将近两个小时,打了个dfs,一直调调调. 最后没调出来,手模了个数据就把自己两个小时的思路hack了 ...

  8. egret 篇——关于ios环境下微信浏览器的音频自动播放问题

    前段时间公司突然想用egret(白鹭引擎)做一个金币游戏,大半个月边看文档边写吭哧吭哧也总算是弄完了.期间遇到一个问题,那就是ios环境下微信浏览器的音频自动播放问题. 个人感觉吧,egret自己封装 ...

  9. 组件:基础的基础组件(Component,Portlet)

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  10. Django入门之基础篇01

    这是第一篇Django(花音:浆够)入门博客,学习Django的初衷是为了开发自己的个人小小网站(虽然有了博客园,还是想建立自己的博客,因为自主定制,香香香~!)