Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
注意:本题只有一组测试数据,处理到文件结束.
banana band bee absolute acm ba b band abc
2 3 1 0
#include<cstdio>
#include<cstring>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const int M = 1e6+9;
char s[20],s1[20];
int trie[M][26],len,root,tot=0;
ll sum[M];
void inserts()
{
len=strlen(s);
root=0;
for(int i=0;i<len;i++)
{
int pos=s[i]-'a';
if(!trie[root][pos])
trie[root][pos]=++tot;
sum[trie[root][pos]]++;
root=trie[root][pos];
}
}
ll searchs()
{
root=0;
len=strlen(s1);
for(int i=0;i<len;i++)
{
int pos=s1[i]-'a';
if(!trie[root][pos])
return 0;
root=trie[root][pos];
}
return sum[root];
}
int main()
{
while(1)
{
gets(s);
//scanf("%s",s);
len=strlen(s);
//printf("%d\n",len);
if(!len)
break;
inserts();//建树
}
while(scanf("%s",s1)!=EOF)
{
ll ans=searchs();
printf("%lld\n",ans);
}
return 0;
}