分析:依然是一个模板题,不过在写建立失败指针的地方竟然写错了三次....看来现在状态不太好。
 
代码如下:
=========================================================================================================================
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std; const int MAXN = 2e6+;
const int MAXM = ;
const int oo = 1e9+; char virus[][], MumStr[MAXN];
int times[]; struct node
{
node *Fail, *next[MAXM];
int leaf;
}; void Insert(node *root, char s[], int num)
{
node *p = root; for(int i=; s[i]; i++)
{
int k = s[i] - 'A'; if(p->next[k] == NULL)
p->next[k] = new node();
p = p->next[k];
} p->leaf = num;
}
void GetFail(node *root)
{
node *p = root, *temp;
queue<node *> Q; for(int i=; i<MAXM; i++)if(p->next[i])
{///竟然头晕的把这个地方写错了三次....
p->next[i]->Fail = root;
Q.push(p->next[i]);
} while(Q.size())
{
p = Q.front();
Q.pop(); for(int i=; i<MAXM; i++)if(p->next[i])
{
temp = p->Fail; while(temp != NULL)
{
if(temp->next[i] != NULL)
{
p->next[i]->Fail = temp->next[i];
break;
} temp = temp->Fail;
} if(temp == NULL)
p->next[i]->Fail = root; Q.push(p->next[i]);
}
}
}
void FreeTrie(node *root)
{
for(int i=; i<MAXM; i++)
{
if(root->next[i])
FreeTrie(root->next[i]);
} free(root);
}
void Query(node *root)
{
node *p = root, *temp; for(int i=; MumStr[i]; i++)
{
if(MumStr[i] < 'A' || MumStr[i] > 'Z')
{///排除不为大写英文的字符
p = root;
continue;
} int k = MumStr[i] - 'A'; while(!p->next[k] && p != root)
p = p->Fail; if(!p->next[k])continue; temp = p = p->next[k]; while(temp != root)
{
if(temp->leaf)
times[temp->leaf] += ;
temp = temp->Fail;
}
}
} int main()
{
int N; while(scanf("%d", &N) != EOF)
{
node *root = new node();
memset(times, , sizeof(times)); for(int i=; i<=N; i++)
{
scanf("%s", virus[i]);
Insert(root, virus[i], i);
} GetFail(root); scanf("%s", MumStr);
Query(root); for(int i=; i<=N; i++)
{
if(times[i])
printf("%s: %d\n", virus[i], times[i]);
} FreeTrie(root);
} return ;
}

病毒侵袭持续中 - HDU 3065(AC自动机,判断子串个数)的更多相关文章

  1. 病毒侵袭持续中 HDU - 3065 AC自动机

    小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒 ...

  2. AC日记——病毒侵袭持续中 hdu 3065

    3065 思路: 好题: 代码: #include <queue> #include <cstdio> #include <cstring> using names ...

  3. 病毒侵袭持续中---hdu3065(AC自动机模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 模板题,没什么好说的... #include<stdio.h> #include&l ...

  4. HDU-3065 病毒侵袭持续中 字符串问题 AC自动机

    题目链接:https://cn.vjudge.net/problem/HDU-3065 题意 跟上一道题是几乎一模一样,这次是统计关键词的出现次数 一个相当坑的地方,注意多组样例 思路 套模版 改in ...

  5. hdu 3065 AC自动机(各子串出现的次数)

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

  6. hdu 3065 病毒侵袭持续中【AC自动机】

    <题目链接> 题目大意: 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是 ...

  7. HDU 3065 病毒侵袭持续中 (AC自动机)

    题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...

  8. HDU 3065 病毒侵袭持续中(AC自己主动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...

  9. AC自动机---病毒侵袭持续中

    HDU 3065 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/C Description 小t ...

随机推荐

  1. vs2010安装路径解决不能修改的方法

    环境:win7 64位 解决:网上说需要卸载以下4项 Microsoft Visual Studio Tools for Applications 2.0 - ENU Microsoft Visual ...

  2. yzoi2223集合构造的详细解法

    Description - 问题描述 集合M的定义如下: 1是M中的元素 如果x是M中的元素,那么2x+1和4x+5都是M中的元素 那么,集合M中,最小的n个数是哪些? Input - 输入数据 一个 ...

  3. spring 构造注入 异常 Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments

    你可能在做项目的时候,需要在项目启动时初始化一个自定义的类,这个类中包含着一个有参的构造方法,这个构造方法中需要传入一些参数. spring提供的这个功能叫“构造注入”, applicationCon ...

  4. access_token的获取方式

      获取Access Token $appid = ""; $appsecret = ""; $url = "https://api.weixin.q ...

  5. magento错误 Service Temporarily Unavailable magento

    前台访问出现错误 Service Temporarily Unavailable magento 解决方法 Service TemporarilyUnavailable字面意思是此服务暂时无法使用,如 ...

  6. 【转】HTML5 LocalStorage 本地存储

    原文见:http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html 说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步 ...

  7. Python Tutorial 学习(六)--Modules

    6. Modules 当你退出Python的shell模式然后又重新进入的时候,之前定义的变量,函数等都会没有了. 因此, 推荐的做法是将这些东西写入文件,并在适当的时候调用获取他们. 这就是为人所知 ...

  8. JSP HTML区别

    1.最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开2.定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet.3.他们的表头 ...

  9. [Fw]人和人之间在八小时之外的差别

    原文地址:http://hankjin.blog.163.com/blog/static/3373193720083249387801/ 业余八小时人的活动千姿百态.八小时以外你在干什么,恰恰决定着你 ...

  10. android.support.v7.widget.Toolbar 中menu图标不显示问题

    <?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http:// ...