hdu2222 AC自動機-給定串中出現了幾個模式串
http://acm.hdu.edu.cn/showproblem.php?pid=2222
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.
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.
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
/**
hdu2222 AC自動機-給定串中出現了幾個模式串
解題思路:AC自動機模板題
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
struct Trie
{
int next[500010][26],fail[500010],end[500010];
int root,L;
int newnode()
{
for(int i=0; i<26; i++)
{
next[L][i]=-1;
}
end[L++]=0;
return L-1;
}
void init()
{
L=0;
root=newnode();
}
void insert(char *buf)
{
int len=strlen(buf);
int now=root;
for(int i=0; i<len; i++)
{
if(next[now][buf[i]-'a']==-1)
next[now][buf[i]-'a']=newnode();
now=next[now][buf[i]-'a'];
}
end[now]++;
}
void build()
{
queue<int>Q;
fail[root]=root;
for(int i=0; i<26; i++)
{
if(next[root][i]==-1)
next[root][i]=root;
else
{
fail[next[root][i]]=root;
Q.push(next[root][i]);
}
}
while(!Q.empty())
{
int now=Q.front();
Q.pop();
for(int i=0; i<26; i++)
{
if(next[now][i]==-1)
next[now][i]=next[fail[now]][i];
else
{
fail[next[now][i]]=next[fail[now]][i];
Q.push(next[now][i]);
}
}
}
}
int query(char *buf)
{
int len=strlen(buf);
int now=root;
int res=0;
for(int i=0; i<len; i++)
{
now=next[now][buf[i]-'a'];
int temp=now;
while(temp!=root)
{
res+=end[temp];
end[temp]=0;
temp=fail[temp];
}
}
return res;
}
} ac;
char buf[1000010];
int main()
{
int T;
int n;
scanf("%d",&T);
while( T-- )
{
scanf("%d",&n);
ac.init();
for(int i = 0;i < n;i++)
{
scanf("%s",buf);
ac.insert(buf);
}
ac.build();
scanf("%s",buf);
printf("%d\n",ac.query(buf));
}
return 0;
}
相關文章
- hdu5384 AC自動機模板題,統計模式串在給定串中出現的個數模式
- hdu2896 AC自動機-標記哪些模式串在目標串中出現過模式
- hdu3065 AC自動機-每個標準串在模式串中出現的次數模式
- AC 自動機——多模式串匹配模式
- AC自動機+trie樹實現高效多模式匹配字典模式
- 編寫一個程式實現模式串的各種模式匹配模式
- 自己實現一個 DFA 串模式識別器(一)模式
- 自己實現一個 DFA 串模式識別器(二)模式
- 串的基本運算實現-加密解密串加密解密
- AC自動機:Tire樹+KMPKMP
- Aho-Corasick 演算法 AC自動機實現演算法
- AC自動機學習筆記筆記
- 【Ac自動機】hdu 5880 Family ViewView
- 深度學習與計算機視覺系列(9)_串一串神經網路之動手實現小例子深度學習計算機視覺神經網路
- 串(2)--模式匹配演算法模式演算法
- 子串查詢;及排列子串分析
- POJ 3691 DNA repair (AC自動機 + dp)AI
- POJ 3294 Life Forms(字尾陣列求k個串的最長子串)ORM陣列
- 【練習】串的堆分配實現
- 【練習】塊鏈串的實現
- 串的堆分配表示與實現
- 從零開始發明 AC 自動機
- 順序結構儲存串實現串萬用字元匹配的演算法字元演算法
- 假設串S1 = "I come from Beijing",S2 = "Chongqing" ,Sub = "America". 利用串的基本操作,如果串的賦值、串的插入、串的刪除、串的替換、對上面賦值
- 鑰匙串密碼忘記了怎麼辦?如何在Mac上重置鑰匙串密碼密碼Mac
- 子串查詢
- 查詢子串
- C# 格式串C#
- 最長子串
- 基於Python+requests搭建的自動化框架-實現流程化的介面串聯Python框架
- 【LISTENER】資料庫連線串的幾種寫法資料庫
- 兩個字串的最長公共子串字串
- (迴文串)leetcode各種迴文串問題LeetCode
- 動態規劃題:把一個字串變為迴文串動態規劃字串
- 【Ac自動機+矩陣加速】poj 2778 DNA Sequence矩陣
- poj 2778 AC自動機與矩陣連乘矩陣
- hdu2243 ac自動機+矩陣連乘矩陣
- 資料結構---串資料結構