hdu 1251 统计难题 (字典树入门题)

时间:2023-12-24 21:04:49
 /*******************************************************
题目: 统计难题 (hdu 1251)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251
算法: 字典树
提示: 这题压要用c++提交,G++会超内存
*******************************************************/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
char s[];
typedef struct Node
{
Node *next[];
int cut;
}Node;
Node *root;
void inser(char *s)
{
Node *p=root;
for (int i=;s[i];i++)
{
int x=s[i]-'a';
if (p->next[x]==NULL)
{
p->next[x]=(Node *)malloc(sizeof(Node));
p->next[x]->cut=;
for (int i=;i<;i++) p->next[x]->next[i]=NULL;
}
p=p->next[x];
p->cut++;
}
}
int Find(char *s)
{
Node *p=root;
for (int i=;s[i];i++)
{
int x=s[i]-'a';
if (p->next[x]==NULL) return ;
p=p->next[x];
}
return p->cut;
}
int main()
{
root=new Node();
while (gets(s))
{
if (strcmp(s,"")==) break;
else inser(s);
}
while (gets(s))
{
printf("%d\n",Find(s));
}
return ;
}