#include <iostream>
#include <string>
using namespace std;
struct node
{
bool isWord;
int next[26],cnt;
}tree[1000010];
string word;
int total;
void init(int i)
{
int k(0);
while (k<26)
tree[i].next[k++]=0;
tree[i].cnt=0;
tree[i].isWord = false;
return ;
}
void insert()
{
int len = word.size();
int i,k;
int nxt;
for (i=k=0;i<len;k=nxt,++i)
{
nxt = tree[k].next[word[i]-'a'];
if (!nxt) tree[k].next[word[i]-'a'] = nxt =++total;
++tree[nxt].cnt;
}
}
int find()
{
int i;
int len = word.size();
int nxt;
int k;
for (i=0,k=0;i<len;k=nxt,++i)
{
nxt = tree[k].next[word[i]-'a'];
if (!nxt) return 0;
}
return tree[k].cnt;
}
int main()
{
total=0;
while (getline(cin,word)&&word!="")
insert();
while (cin>>word)
cout<<find()<<endl;
return 0;
}
hdu1251 统计难题(字典树)
最新推荐文章于 2025-02-28 00:15:00 发布