Keywords Search

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 85955    Accepted Submission(s): 29888

Problem Description
In the modern time, Search engine came into the life of everybody like Google, Baidu, etc.
Wiskey also wants to bring this feature to his image retrieval system.
Every
image have a long description, when users type some keywords to find
the image, the system will match the keywords with description of image
and show the image which the most keywords be matched.
To simplify
the problem, giving you a description of image, and some keywords, you
should tell me how many keywords will be match.
 
Input
First line will contain one integer means how many cases will follow by.
Each case will contain two integers N means the number of keywords and N keywords follow. (N <= 10000)
Each keyword will only contains characters 'a'-'z', and the length will be not longer than 50.
The last line is the description, and the length will be not longer than 1000000.
 
Output
Print how many keywords are contained in the description.
 
Sample Input
1
5
she
he
say
shr
her
yasherhs
 
Sample Output
3
没什么好说的:上模板
https://blog.csdn.net/bestsort/article/details/82947639
https://www.cnblogs.com/cjyyb/p/7196308.html
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include <queue>
#include <stdio.h>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF 0x3f3f3f3f
using namespace std;
const int N = ;
char a[N] , str[];
int k = , tree[][];
int color[];
int fail[];
int ans = ;
void winsert(char *a)
{
int p = ;
for(int i = ; a[i] ; i++)
{
int c = a[i] - 'a';
if(!tree[p][c]) tree[p][c] = ++k;
p = tree[p][c];
}
color[p]++;
} void getfail()
{
queue<int>q;
for(int i = ; i < ; i++)
{
if(tree[][i])
{
fail[tree[][i]] = ;
q.push(tree[][i]);
}
}
while(!q.empty())
{
int now = q.front();
q.pop();
for(int i = ; i < ; i++)
{
if(tree[now][i])
{
fail[tree[now][i]] = tree[fail[now]][i];
q.push(tree[now][i]);
}
else
{
tree[now][i] = tree[fail[now]][i];
}
}
} } void query(char *str)
{
int now = ;
for(int i = ; str[i] ; i++)
{
now = tree[now][str[i] - 'a'];
for(int j = now ; j && color[j] != - ; j = fail[j])
{
ans += color[j] ;
color[j] = - ;
}
} } int main()
{
int t ;
scanf("%d" , &t);
while(t--)
{
memset(tree, ,sizeof(tree));
memset(color , , sizeof(color));
ans = ;
k = ;
int n ;
scanf("%d" , &n);
for(int i = ; i < n ; i++)
{
scanf("%s" , a);
winsert(a);
}
fail[] = ;
getfail();
scanf("%s" , str);
query(str);
printf("%d\n" , ans);
} return ;
}

ac自动机(tree+kmp模板)的更多相关文章

  1. 2017多校第8场 HDU 6138 Fleet of the Eternal Throne AC自动机或者KMP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6138 题意:给n个串,每次询问x号串和y号串的最长公共子串的长度,这个子串必须是n个串中某个串的前缀 ...

  2. AC自动机及KMP练习

    好久都没敲过KMP和AC自动机了.以前只会敲个kuangbin牌板子套题.现在重新写了自己的板子加深了印象.并且刷了一些题来增加自己的理解. KMP网上教程很多,但我的建议还是先看AC自动机(Trie ...

  3. AC自动机——看似KMP在跑,其实fail在跳

    先存代码 AC自动机(简单版) #include<bits/stdc++.h> #define maxn 1000007 using namespace std; int n,ans; i ...

  4. AC自动机(Aho-Corasick automation)模板 HDU:2222

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> us ...

  5. HDU2222【AC自动机(基础·模板)】

    Frist AC zi dong ji(Aho-Corasick Automation) of life #include <bits/stdc++.h> using namespace ...

  6. Trie树&kmp&AC自动机&后缀数组&Manacher

    Trie 计数+Trie,读清题意很重要 https://vjudge.net/problem/UVALive-5913 kmp AC自动机 模板:https://vjudge.net/problem ...

  7. HDU:2222-Keywords Search(AC自动机模板,匹配模拟)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) P ...

  8. AC自动机--summer-work之我连模板题都做不出

    这章对现在的我来说有点难,要是不写点东西,三天后怕是就一无所有了. 但写这个没有营养的blog的目的真的不是做题或提升,只是学习学习代码和理解一些概念. 现在对AC自动机的理解还十分浅薄,这里先贴上目 ...

  9. 【模板】AC自动机(简单版)

    我:“woc...AC自动机?” 我:“可以自动AC???” 然鹅... 大佬:“傻...” 我:“(⊙_⊙)?” 大佬:“缺...” 我:“......” (大佬...卒 | 逃...) emm.. ...

随机推荐

  1. windows下使用命令行获取管理员权限

    在win下运行npm install安装依赖出现错误: Error: EBUSY, resource busy or locked 搜索错误信息后发现是由于没有管理员权限,在bash中输入以下命令后运 ...

  2. restTemplate工具类

    import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.sprin ...

  3. 微信支付MD5签名算法C#版,ASCII码字典序排序0,A,B,a,b

    /// <summary> /// 微信支付MD5签名算法,ASCII码字典序排序0,A,B,a,b /// </summary> /// <param name=&qu ...

  4. Webpack3.X版 学习全文

    如果你webpack用的是4.x版本,此文章部分知识有所改动,所以学习时尽量使用3.x的版本. 本文讲解的是Webpack3.0+的知识,努力做到全网最好的webpack3.0教程.文章通过一个半月的 ...

  5. Java性能调优工具(Linux)

    为了能准确获得程序的性能信息,需要使用各种辅助工具.以下主要介绍了Linux上关于Java的系统性能分析工具,掌握这些工具,对于性能瓶颈定位.系统故障排查都有帮助. 1.top命令 [root@loc ...

  6. 修改编码为utf8mb4 以支持emoji表情

    环境: 项目db的所有字符集都已经初始化为utf-8,如 status命令显示如下: Server characterset: utf8Db characterset: utf8Client char ...

  7. Spring的AOP和IoC及隔离级别

    Spring的AOP和IoC Spring AOP:代理机制.Spring提供的自动代理机制 Spring的IoC来实组件之间的依赖关系注入, 使控制层与业务实现分离,即客户通过调用业务委托接口来调用 ...

  8. OC + RAC (二) Command 命令的用法

    -(void)_test2{ ///////////////////////////////////////Command 命令的用法 注意使用command.executionSignals去订阅时 ...

  9. SQL Server 中用While循环替代游标Cursor的解决方案

    在编写SQL批处理或存储过程代码的过程中,经常会碰到有些业务逻辑的处理,需要对满足条件的数据记录逐行进行处理,这个时候,大家首先想到的方案大部分是用“游标”进行处理. 举个例子,在订单管理系统中,客服 ...

  10. 【Go】Go语言的%d,%p,%v等占位符的使用

    golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...