#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int dp[200];
int mod=20071034;
char str[200];
struct tire
{
int ch[200][200];
int val[200];
int sz;
void reset()
{
memset(ch[0],0,sizeof(ch[0]));
sz=1;
memset(val,0,sizeof(val));
}
int idx(char c)
{
return c-'a';
}
void insert(char *s)
{
int u=0,l=strlen(s);
for(int i=0;i<l;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof ch[sz]);
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=1;
}
int query(char *s,int p)
{
int u=0,l=strlen(s),res=0;
for(int i=p;i<l;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
return res;
u=ch[u][c];
if(val[u])
{
res+=dp[i+1];
res=res%mod;
}
}
return res;
}
}T;
int main()
{
char a[100];
int cas=1;
while(scanf("%s",str)!=EOF)
{
memset(dp,0,sizeof(dp));
int n;
T.reset();
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",a);
T.insert(a);
}
int l=strlen(str);
dp[l]=1;
for(i=l-1;i>=0;--i)
dp[i]=T.query(str,i);
printf("Case %d:%d\n",cas++,dp[0]);
}
return 0;
}
字符串-背单词-P209
最新推荐文章于 2023-04-14 18:52:56 发布