1 5 she he say shr her yasherhs
3
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<vector>
#include<cstring>
#define N 1000010
using namespace std;
int n;
char s[N];
struct Tire {
int num;
struct Tire *net[26];
Tire() {
num=0;
for(int i=0; i<26; i++) {
net[i]=NULL;
}
}
};
void CreatTire(Tire *p,char s[]) {
int i=0;
Tire *q=p;
while(s[i]) {
int nx=s[i]-'a';
if(q->net[nx]==NULL) {
q->net[nx]=new Tire;
}
q=q->net[nx];
i++;
}
q->num++;
}
int Serch(Tire *p,char s[],int ii) {
int i=ii;
Tire *q=p;
int res=0;
while(s[i]) {
int nx=s[i]-'a';
if(q->net[nx]==NULL)break;
if(q->net[nx]->num) {
res+=q->net[nx]->num;
q->net[nx]->num=0;
}
q=q->net[nx];
i++;
}
return res;
}
void Delete(Tire *p) {
if(p==NULL)return;
for(int i=0; i<26; i++) {
Delete(p->net[i]);
}
free(p);
}
int main() {
//freopen("test.in","r",stdin);
int t;
cin>>t;
while(t--) {
scanf("%d",&n);
Tire *p=new Tire;
for(int i=0; i<n; i++) {
scanf("%s",s);
CreatTire(p,s);
}
scanf("%s",s);
int ans=0;
for(int i=0; s[i]; i++) {
ans+=Serch(p,s,i);
}
printf("%d\n",ans);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/acm_baihuzi/article/details/46910301