#include<cstdio>
//字典树
#define kind 26
struct Treenode
{
bool hasStr;//
int count;
Treenode*next[kind];
};
Treenode Memory[1000000]={0};
int MemoryId=0;
bool insert(Treenode*root,const char*word)
{
Treenode*location=root;
for(int i=0;word[i];++i)
{
int branch=word[i]-'a';
if(!location->next[branch])
location->next[branch]=&Memory[MemoryId++];
location=location->next[branch];
location->count++;
}
if(location->hasStr) return false;
location->hasStr=true;
return true;
}
bool search(Treenode*root,const char*word)
{
Treenode*location=root;
for(int i=0;word[i]&&location;++i)
location=location->next[word[i]-'a'];
return location!=NULL&&location->hasStr;
}
int main()
{
freopen("1065.txt","r",stdin);
int n;
scanf("%d",&n);
char word[11];
Treenode*root=&Memory[MemoryId++];
int num=0;
for(int i=0;i<n;++i)
{
scanf("%s",word);
if(insert(root,word))
++num;
}
printf("%d\n",num);
return 0;
}
转载于:https://www.cnblogs.com/yangjinbo28/archive/2010/04/14/1712215.html