您的位置:首页 > 其它

poj 2418 Hardwood Species

2013-04-14 19:39 323 查看
为了练习下字典树找的题目,用的是数组模拟的链表。
其实更简单的做法是用一次快排。
#include
#include
#include
using namespace std;
const int maxn=111111;
char a[101];
double sum;
struct
{
char data;
int w[100];
int count;
}tr[maxn];
int lon;
int insert(char a[])
{
int t=1;
for(int
i=0;a[i]!=0;i++)
{
//
printf("%d ",a[i]-' ');

if(tr[t].w[a[i]-' ']==0)

{

tr[t].w[a[i]-' ']=++lon;

tr[lon].data=a[i];

t=lon;

}

else

{

t=tr[t].w[a[i]-' '];

}
}
tr[t].count++;
// printf("%d
%d\n",t,tr[t].count);
}

char ans[101];
int prin(int t,int w)
{
//
printf("%d\n",t);
if(tr[t].data==0)
return(0);

ans[++w]=tr[t].data;

if(tr[t].count>0)
{

for(int i=2;i<=w;i++)

printf("%c",ans[i]);

printf(" ");

printf("%.4f\n",tr[t].count/sum*100);
}
for(int
i=0;i<99;i++)

prin(tr[t].w[i],w);
}

int main()
{
//
freopen("in.txt","r",stdin);
sum=0;
lon=1;

memset(tr,0,sizeof(tr));
while(gets(a))
{

++sum;

insert(a);
}
tr[1].data=1;
prin(1,0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: