#include<stdio.h>
#include<string.h>
const int MM = 2000050,M1 = 26;
const int maxn=2005;
int N,L;
int lc,ls,lt;
int fs[maxn],ft[maxn];
int ans;
char ch[maxn],s[maxn],t[maxn];
struct node{
int sign;
int vis;
int next[26];
}tree[MM];
void init(int p)
{
for(int i=0;i<M1;i++)
tree[p].next[i]=0;
tree[p].sign=tree[p].vis=0;
}
void insert(int id)
{
int i=id,p=0,x;
while(ch[i])
{
x=ch[i]-'a';
if(tree[p].next[x]==0)
{
tree[p].next[x]=++L;
init(L);
}
p=tree[p].next[x];
if(ft[i] && i-id+1>=lt && id+ls-1<=i && !tree[p].vis){
tree[p].vis=1;
ans++;
}
i++;
}
tree[p].sign++;
}
int main(){
int i,j,k;
while(scanf("%s%s%s",ch,s,t)!=EOF){
memset(fs,0,sizeof(fs));
memset(ft,0,sizeof(ft));
lc=strlen(ch);
ls=strlen(s);
lt=strlen(t);
for(i=0;i<lc;i++){
for(j=0,k=i;j<ls && k<lc;k++,j++)
if(ch[k]!=s[j])
break;
if(j==ls)fs[i]=1;
}
for(i=0;i<lc;i++){
for(j=lt-1,k=i;j>=0 && k>=0;k--,j--)
if(ch[k]!=t[j])
break;
if(j==-1)ft[i]=1;
}
ans=0;
L=0;
init(0);
for(i=0;i<lc;i++){
if(fs[i]){
insert(i);
}
}
printf("%d\n",ans);
}
return 0;
}
B. Petr# 113B Tire去重
最新推荐文章于 2022-11-24 20:08:51 发布