第一次做这个题用map做的,这次用字典树做的。
#include <cstdio>
#include <cstring>
struct Trie
{
int cnt;
char str[33];
Trie *next[127];
Trie()
{
cnt = 0;
memset(next,0,sizeof(next));
}
};
char s[33];
Trie *root;
int num;
void Insert(char *s)
{
Trie *p = root;
int len = 0;
while(s[len] != '\0')
{
int index = s[len++];
if(!p->next[index])
p->next[index] = new Trie;
p = p->next[index];
}
strcpy(p->str,s);
p->cnt++;
}
void Print(Trie *p)
{
if(!p) return;
if(p->cnt)
printf("%s %.4f\n",p->str,(p->cnt/(double)num)*100);
for(int i = 0; i < 127; ++i)
if(p->next[i]) Print(p->next[i]);
}
int main()
{
//freopen("in.txt","r",stdin);
num = 0;
root = new Trie;
while(gets(s))
{
Insert(s);
++num;
}
Print(root);
return 0;
}