POJ2418 Hardwood Species Tire树
来源:互联网 发布:28自动挂机软件 编辑:程序博客网 时间:2024/06/01 11:11
题目大意:若干棵树构成一片树林,我们知道每一棵树的名字,按树名字典序输出每种一树所占的比率。
分析:由于树名不止是一个单词,可以用gets输入,输入的同时记录树的数量,字符串排序后遍历一遍即可。为了保证重复树名只输出一次,我们可以在每种树输出一次后标记它的状态,下次不再重复输出。
实现代码如下:
#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#include <cstring>using namespace std;#define son_num 256 //字符串中包含的字符个数#define maxn 35 //单词的最大长度struct tire{ int num; //纪录到达该节点的字符串的个数,即相同前缀数 bool terminal; //如果terminal=true,表示当前点为该字符串最后一个字符 struct tire *next[son_num]; //纪录下一个节点};tire *root;char str0[1000001][maxn];int sum=0;int cmp(const void *a,const void *b){ return strcmp((char *)a,(char *)b);}tire *init() //创建新节点{ tire *p=(tire *)malloc(sizeof(tire)); for(int i=0;i<son_num;i++) p->next[i]=NULL; p->terminal=false; p->num=0; return p;}void insert(tire *root,char str[]) //插入操作{ int i=0; tire *p=root; while(str[i]!='\0') { if(!p->next[ str[i] ]) //如果不存在,建立新节点 p->next[ str[i] ]=init(); p=p->next[ str[i] ]; p->num++; i++; } p->terminal=true;}void find(tire *p,char str[]) //查找操作{ int i=0; while(str[i]!='\0'&&p->next[ str[i] ]) { p=p->next[ str[i] ]; i++; } if(str[i]=='\0'&&p->terminal) { printf("%s %.4f\n",str,(double)p->num/sum*100); p->terminal=false; }}void del(tire *root) //清空操作{ for(int i=0;i<son_num;i++) if(root->next[i]!=NULL) del(root->next[i]); free(root);}int main(){ root=init(); //创建根结点 while(gets(str0[sum])&&str0[sum][0]!='\0') { insert(root,str0[sum]); sum++; } qsort(str0,sum,sizeof(str0[0]),cmp); for(int i=0;i<=sum;i++) //查找操作 find(root,str0[i]); del(root); //释放字典树占用的空间 return 0;}
0 0
- POJ2418 Hardwood Species Tire树
- poj2418 Hardwood Species 排序二叉树
- POJ2418 Hardwood Species(字典树)
- Hardwood Species(poj2418 trie树)
- POJ2418/openjudge Hardwood species 二叉搜索树
- [poj2418]Hardwood Species
- poj2418 - Hardwood Species
- POJ2418-Hardwood Species
- poj2418~Hardwood Species~二叉排序树
- POJ2418--Hardwood Species【map】
- POJ2418--- Hardwood Species
- POJ2418----Hardwood Species
- poj2418(Hardwood Species)
- poj2418 Hardwood Species
- POJ2418——Hardwood Species
- POJ2418——Hardwood Species
- POJ2418 Hardwood Species(二叉搜索树+字典树+MAP)
- poj2418 Hardwood Species STL熟悉+二叉查找树
- BOM 浏览器对象
- 李开复给中国大学生的第二封信—从优秀到卓越
- C#继承之base,virtual,override,abstract,new,sealed关键字
- yacc 和 lex 在ubuntu 上安装
- 字符串朴素匹配C++实现
- POJ2418 Hardwood Species Tire树
- 学习笔记——利用网络的自学
- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
- 李开复给中国大学生的第三封信—成功、自信、快乐
- Spring学习笔记(11)------------bean之间的关系
- LabVIEW中使用二进制文件
- Lunch Time
- mysql允许远程连接
- 【字符编码系列之二】国内中文编码标准简介