HDU1251
代码风格有问题:root与p换一下看起来更好
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
struct Trie
{
int value; //当前前缀出现次数
struct Trie *next[26];
};
Trie *p;
char str[15];
struct Trie *CreateTree()
{
struct Trie *root=(struct Trie*)malloc(sizeof(struct Trie));
root->value=1;
for (int i=0;i<26;i++)
root->next[i]=NULL;
return root;
}
void Insert()
{
Trie *root=p;
int len=strlen(str);
for (int i=0;i<len;i++)
{
int id=str[i]-'a';
if (root->next[id] == NULL)
{
root->next[id]=CreateTree();
root=root->next[id];
}
else
{
root=root->next[id];
(root->value)++;//每次都加一,统计所有当前字符串下的前缀
}
}
}
int Find()
{
Trie *root=p;
int len=strlen(str);
for (int i=0;i<len;i++)
{
int id=str[i]-'a';
if (root->next[id] == NULL) return 0;
else root=root->next[id];
}
return root->value;
}
int main()
{
p=CreateTree();
while (gets(str),strcmp(str,"")!=0) Insert();
while (scanf("%s",str)!=EOF) cout<<Find()<<endl;
return 0;
}