题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3065

题目里面要我们计算每种单词出现的次数,重叠的也要计算,那么我们在查找的时候不要把标记单词结尾的数组(我这里是val)清零就可以重复计算每个单词出现的数量了。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<set>
#include<cstdio>
#include<string>
#include<deque>
using namespace std;
typedef long long LL;
#define eps 1e-8
#define INF 0x3f3f3f3f
#define maxn 50005
int trie[maxn][],fail[maxn],val[maxn],ID[maxn],num[maxn];
int n,m,k,t,cnt;
char s[][],str[];
void init(){
memset(trie,,sizeof(trie));
memset(fail,,sizeof(fail));
memset(val,,sizeof(val));
memset(num,,sizeof(num));
cnt=;
}
void insert(char *s,int id){
int root=;
for(int i=;s[i];i++){
int x=s[i]-;
if(trie[root][x]==)
trie[root][x]=++cnt;
root=trie[root][x];
}
val[root]++;
ID[root]=id;//记录编号
}
void build_fail(){//构建fail指针
queue<int>q;
int root=;
for(int i=;i<;i++){
if(trie[root][i])
q.push(trie[root][i]);
}
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=;i<;i++){
if(trie[u][i]){//u存在儿子i,把i的fail指向fail[u]的儿子i
fail[trie[u][i]]=trie[fail[u]][i];
q.push(trie[u][i]);
}else{//不存在儿子i
trie[u][i]=trie[fail[u]][i];//让fail[u]的儿子i成为u的儿子
}
}
}
}
void query(){
int len=strlen(str);
int u=;
for(int i=;i<len;i++){
int id=str[i]-;
u=trie[u][id];
int temp=u;
while(temp){
if(val[temp]){//找到一个以id+32这个字符结束的单词,我们在这里不把它的标记数组val清零
num[ID[temp]]++;
}
temp=fail[temp];
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF){
init();
for(int i=;i<=n;i++){
scanf("%s",s[i]);
insert(s[i],i);
}
build_fail();
scanf("%s",str);
query();
for(int i=;i<=n;i++){
if(num[i]){
printf("%s: ",s[i]);
printf("%d\n",num[i]);
}
}
}
return ;
}

hdu 3065 AC自动机 标记数组不清零的更多相关文章

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

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

  2. hdu 3065 AC自动机

    // hdu 3065 AC自动机 // // 题目大意: // // 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次 // // 解题思路: // // AC自动机,插入,构建, ...

  3. HDU 3065 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...

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

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

  5. HDU 3065 AC自动机 裸题

    中文题题意不再赘述 注意 失配数组 f  初始化一步到位 #include <stdio.h> #include <string.h> #include <queue&g ...

  6. hdu 3065 AC自动机模版题

    题意:输出每个模式串出现的次数,查询的时候呢使用一个数组进行记录就好. 同上题一样的关键点,其他没什么难度了. #include <cstdio> #include <cstring ...

  7. hdu 5880 AC自动机

    Family View Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. hdu 2825 aC自动机+状压dp

    Wireless Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. hdu 2896 AC自动机

    // hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...

随机推荐

  1. nginx+uwsgi配置

    nginx #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; ...

  2. Linux(CentOS)用户修改密码有效期(chage命令)

    Linux设置用户密码的有效期限 解决: 先查看密码过期时间,现在是90天 1 2 3 4 5 6 7 8 [root@01 ~]# chage -l testuser Last password c ...

  3. mybatis缓存的设计

    继续用提问的方式来看Mybatis的缓存设计. 1.Mybatis如何开启缓存 Mybatis对查询结果进行缓存,所以缓存的对象为具体的Statement 通过在Statement上是否使用缓存来启用 ...

  4. VB.net中合并word中的表格

    软帝国产品的互兼容性使得我们采用vb.net编程语言操作Microsoft Word文档变得相当容易.针对本文的主题,网络上已经有很多大牛博客做了详细的介绍,基本的我就不再赘述,只是自己在做项目的时候 ...

  5. Scaffold-DbContext 命令参数

    NAME Scaffold-DbContext SYNOPSIS Scaffolds a DbContext and entity types for a database. SYNTAX Scaff ...

  6. 文鹏教育_jmeter培训_逻辑控制器_循环取样器

    软件测试高端专家培训 QQ 讨论群498721021 网站http://www.szwpinfo.com   深圳文鹏教育jmeter 性能测试讲义 一.ForEach控制器在jmeter菜单中的位置 ...

  7. Solr中的group与facet的区别

    Solr中的group与facet的区别 如果是简单的使用的话,那么Facet与group都可以用来进行数据的聚合查询,但是他们还是有很大的区别的. 首先上facet跟group的操作: Facet的 ...

  8. JAVA发送HttpClient请求及接收请求结果

    1.写一个HttpRequestUtils工具类,包括post请求和get请求 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...

  9. iOS解决cell重用问题

    在写sina 微博界面的过程中使用到了cell,那么就是在cell上添加一些控件,但是由于每条微博的内容都是不同的,所以在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用 ...

  10. Powerdesigner16 逆向 postgresql9.2

    参考配置连接:https://www.cnblogs.com/simpleZone/p/5489781.html 过程中遇到的问题: 1.Powerdesigner需要用32位的jdk进行逆向,所以需 ...