第一次写TRIE树,贴贴做模板
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
struct Trie
{
char data;
bool isword;
int next[26],cnt;
void init(char c)
{
memset(next,0,sizeof(next));
data=c;
cnt=0;
isword=false;
}
}T[1000001];
char buf[11];
int L=1,ans;
void ins(char *s,int k,int idx)
{
if(!s[k])
{
T[idx].isword=true;
return;
}
if(T[idx].next[s[k]-'a']==0)
{
T[idx].next[s[k]-'a']=++L;
T[L].init(s[k]);
T[L].cnt++;
ins(s,k+1,L);
}
else
T[T[idx].next[s[k]-'a']].cnt++,ins(s,k+1,T[idx].next[s[k]-'a']);
}
void dfs(int x)
{
int i;
for(i=x;i<=L;i++)cout<<'('<<T[i].data<<':'<<T[i].cnt<<')'<<' ';
cout<<endl;
}
void pre(char *s,int k,int idx)
{
if(!s[k])
{
ans=T[idx].cnt;
return;
}
if(T[idx].next[s[k]-'a']==0)return;
pre(s,k+1,T[idx].next[s[k]-'a']);
}
int main()
{
T[1].init('@');
while(gets(buf)!=NULL&&buf[0])
{
ins(buf,0,1);
}
while(gets(buf)!=NULL)
{
ans=0;
pre(buf,0,1);
printf("%d/n",ans);
}
return 0;
}