#include<bits/stdc++.h>
#define N 10500
using namespace std;
queue<int>q;
int n,tt;
char s1[323],s2[323],red[1010],zy[1010];
struct ss
{
int val,pos;
} seat[100010];
struct red
{
int sum,c[N][27],val[N],
fail[N],L[N];
void clear()
{
sum=0;
memset(c,0,sizeof 0);
memset(val,0,sizeof val);
memset(fail,0,sizeof fail);
}
void insert(char *s)
{
int len=strlen(s),now=0;
for(int i=0;i<len;i++)
{
int a=s[i]-'a';
if(!c[now][a]) c[now][a]=++sum;
now=c[now][a];
}
val[now]++;L[now]=len;
}
void Make_Fail()
{
for(int i=0;i<=26;i++)
if(c[0][i])
{
fail[c[0][i]]=0;
q.push(c[0][i]);
}
while(!q.empty())
{
int pos=q.front();q.pop();
for(int i=0;i<=26;i++)
if(c[pos][i]) {fail[c[pos][i]]=c[fail[pos]][i];q.push(c[pos][i]);}
else c[pos][i]=c[fail[pos]][i];
}
}
int query(char *s)
{
int len=strlen(s),now=0,ans=0;
for(int i=0;i<len;i++)
{
now=c[now][s[i]-'a'];
for(int t=now;t&&val[t]!=-1;t=fail[t])
{
ans+=val[t];
seat[++tt].pos=t;seat[tt].val=val[t];
val[t]=-1;
}
}
for(int i=1;i<=tt;i++) val[seat[i].pos]=seat[i].val;tt=0;
return ans;
}
} AC;
int main()
{
freopen("323.in","r",stdin);
// freopen("323.out","w",stdout);
scanf("%d",&n);int ans=0,len=0;
for(int i=1;i<=n;i++)
{
scanf("%s",s1);
for(int j=0;j<strlen(s1);j++)
if(s1[j]<='Z') s1[j]+=32;
s1[strlen(s1)]='z'+1;
// printf("%s\n",s1);
AC.insert(s1);
memset(s1,0,sizeof s1);
}
AC.Make_Fail();
while(scanf("%s",s1)!=EOF)
{
int l=strlen(s1);
for(int i=0;i<l;i++)
{
if(s1[i]<='Z'&&s1[i]!='.'&&s1[i]!=',') s1[i]+=32;
red[len++]=s1[i];
}
red[len++]='z'+1;
memset(s1,0,sizeof s1);
}
// printf("%s\n",red);return 0;
int t=0;
while(t<len-1)
{
int l=0;memset(zy,0,sizeof zy);
for(int i=t;;i++)
if(red[i]==',') zy[l++]='z'+1;
else if(red[i]!='.') zy[l++]=red[i];
else {zy[l++]='z'+1;break ;}
ans+=AC.query(zy);
t+=l;
// printf("%s\n",zy);
// printf("%d\n",t);
}
printf("%d\n",ans);
return 0;
}
by xnzy @ 2018-06-16 20:45:03
> ```cpp
> ```cpp
> ```
> ```
> 谢谢
by LCuter @ 2018-06-16 20:48:19
@[Ryan_wxn_](/space/show?uid=83547)
啊?
by xnzy @ 2018-06-19 19:57:07
@[xnzy](/space/show?uid=75750) 麻烦代码用三个`括起来
by LCuter @ 2018-06-20 19:28:06