[HDU]2222 Keywords Search
2017-07-28 11:02
441 查看
补全AC自动机版本.
#include<stdio.h>
#include<queue>
#include<cstring>
using namespace std;
queue<int> q;
const int maxn=500005;
const int N=10005;
char str[maxn*2],T,n;
int tot;
struct node{int c[26],fail,cnt;}s[maxn];
inline void insert(char *ss){
int p=0;
for(int i=0;ss[i];i++){
int index=ss[i]-'a';
if(!s[p].c[index]) s[p].c[index]=++tot;
p=s[p].c[index];
}
s[p].cnt++;
}
void bfs(){
s[0].fail=0;
for(int i=0;i<26;i++){
int u=s[0].c[i];
if(u) {s[u].fail=0;q.push(u);}
}
while(!q.empty()){
int u=q.front();q.pop();
for(int i=0;i<26;i++){
int v=s[u].c[i];
if(!v) {s[u].c[i]=s[s[u].fail].c[i];continue;}
s[v].fail=s[s[u].fail].c[i];
q.push(v);
}
}
}
int ac(char *ss){
int i,j,u,v,sum;
u=sum=0;
for(i=0;ss[i];i++){
int index=ss[i]-'a';
v=u=s[u].c[index];
while(s[v].cnt){
sum+=s[v].cnt;
s[v].cnt=0;
v=s[v].fail;
}
}
return sum;
}
int main(){
int n,i,j,t;
char ss[maxn<<1];
scanf("%d",&T);
while(T--){
scanf("%d",&n);
memset(s,0,sizeof(s));
for(i=1;i<=n;i++){
scanf("%s",ss);
insert(ss);
}
bfs();
scanf("%s",ss);
printf("%d\n",ac(ss));
}
return 0;
}
#include<stdio.h>
#include<queue>
#include<cstring>
using namespace std;
queue<int> q;
const int maxn=500005;
const int N=10005;
char str[maxn*2],T,n;
int tot;
struct node{int c[26],fail,cnt;}s[maxn];
inline void insert(char *ss){
int p=0;
for(int i=0;ss[i];i++){
int index=ss[i]-'a';
if(!s[p].c[index]) s[p].c[index]=++tot;
p=s[p].c[index];
}
s[p].cnt++;
}
void bfs(){
s[0].fail=0;
for(int i=0;i<26;i++){
int u=s[0].c[i];
if(u) {s[u].fail=0;q.push(u);}
}
while(!q.empty()){
int u=q.front();q.pop();
for(int i=0;i<26;i++){
int v=s[u].c[i];
if(!v) {s[u].c[i]=s[s[u].fail].c[i];continue;}
s[v].fail=s[s[u].fail].c[i];
q.push(v);
}
}
}
int ac(char *ss){
int i,j,u,v,sum;
u=sum=0;
for(i=0;ss[i];i++){
int index=ss[i]-'a';
v=u=s[u].c[index];
while(s[v].cnt){
sum+=s[v].cnt;
s[v].cnt=0;
v=s[v].fail;
}
}
return sum;
}
int main(){
int n,i,j,t;
char ss[maxn<<1];
scanf("%d",&T);
while(T--){
scanf("%d",&n);
memset(s,0,sizeof(s));
for(i=1;i<=n;i++){
scanf("%s",ss);
insert(ss);
}
bfs();
scanf("%s",ss);
printf("%d\n",ac(ss));
}
return 0;
}
相关文章推荐
- HDU - 2222 Keywords Search
- HDU 2222 — Keywords Search
- AC自动机 ( 动态建树模板 )——Keywords Search ( HDU 2222 )
- Keywords Search(hdu 2222)
- hdu 2222(Keywords Search) (AC自动机)
- Hdu 2222 Keywords Search
- Hdu 2222 . Keywords Search
- HDU 2222 Keywords Search
- Hdu2222 Keywords Search
- HDU 2222 Keywords Search (AC自动机)
- hdu 2222 Keywords Search
- hdu 2222-Keywords Search
- HDU 2222 Keywords Search
- HDU 2222 Keywords Search
- hdu 2222 Keywords Search (ac_automaton)
- HDU【2222】Keywords Search
- |Hdu 2222|AC自动机|Keywords Search
- 【hdu 2222】Keywords Search
- 杭电 HDU 2222 Keywords Search
- HDU 2222——Keywords Search(AC自动机)