#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000010;
struct node{int p,ch[130];}a[maxn];
int cnt=1,sum=0;
char t[35];
void out(int rt,int L){
for(int i=0;i<=129;i++){
int u=a[rt].ch[i];
if(u){
t[L]=i;
if(a[u].p){
t[L+1]='\0';
printf("%s %.4lf\n",t,(double)a[u].p*100.0/sum);
}
out(u,L+1);
}
}
}
int main(){
while(gets(t)){
if(!t[0])break;
sum++;
int len=strlen(t);
int cur=1;
for(int i=0;i<len;i++){
if(!a[cur].ch[t[i]])a[cur].ch[t[i]]=++cnt;
cur=a[cur].ch[t[i]];
}
a[cur].p++;
}
out(1,0);
return 0;
}
POJ2418字典树
最新推荐文章于 2022-09-07 11:36:41 发布