hdu2222Keywords Search字典树入门……

时间:2023-03-09 19:31:28
hdu2222Keywords Search字典树入门……
#include<iostream>
#include<cstring>
using namespace std;
struct node
{
int num;
node *next[26];
}*root;
void join(const char *s)
{
node *p=root,*t;
int i,len=strlen(s);
for(i=0;i<len;i++)
if(p->next[s[i]-'a'])
p=p->next[s[i]-'a'];
else
{
t=new node;
memset(t,0,sizeof(node));
p->next[s[i]-'a']=t;
p=t;
}
p->num++;
}
void work(const char *s)
{
node *p;
int i,j,len=strlen(s),sum=0;
for(i=0;i<len;i++)
{
p=root;
for(j=i;j<len;j++)
{
if(p->next[s[j]-'a'])
{
p=p->next[s[j]-'a'];
sum+=p->num;
p->num=0;
}
else
break;
}
}
printf("%d\n",sum);
}
void init()
{
int num;
char t[60];
root=new node;
memset(root,0,sizeof(node));
scanf("%d",&num);
while(num--)
{
scanf("%s",t);
join(t);
}
}
int main()
{
int exp;
char t[1000010];
scanf("%d",&exp);
while(exp--)
{
init();
scanf("%s",t);
work(t);
}
}