POJ
来源:互联网 发布:论坛软件下载 编辑:程序博客网 时间:2024/06/06 09:38
题目大意:
就是给你n个(1000000)字符串,这些字符串一共最多m(10000)种,一个字符串最长30个字符。问你每种字符串占总数的百分比。
注:这个有点坑的地方就是,字符串除了大小写字母,还好有多未知的字符,所有字典树数组开成了270就过了,之前开的100大小就过不去。
#include<iostream>#include<stdio.h>#include<string.h>#define M 10500using namespace std;int num[M]={0};char str[M][35]={0};struct trie{int id;trie *next[270];trie(){id=0;for(int i=0;i<270;i++){next[i]=NULL;}}};trie root;int n=0;int m=1;void trie_add(char *c){trie *p=&root;for(int i=0;i<strlen(c);i++){int t;t=(int)c[i];if((*p).next[t]==NULL){(*p).next[t]=new trie;}p=(*p).next[t];}if((*p).id==0){(*p).id=m;for(int i=0;i<strlen(c);i++){str[m][i]=c[i];}m++;}num[(*p).id]++;}void ceshi(){for(int i=0;i<m;i++){cout<<num[i]<<" ";}}void dfs(trie *p){if((*p).id!=0){printf("%s ",str[(*p).id]);double l;l=(double)num[(*p).id]/(double)n*100;printf("%.4lf\n",l);}for(int i=0;i<270;i++){if((*p).next[i]==NULL)continue;dfs((*p).next[i]);}} int main(){char l[35]={0};while(cin.getline(l,30)){n++;trie_add(l);memset(l,0,sizeof(l));}//ceshi();//cout<<endl<<n<<endl;trie *p=&root;dfs(p);}
另外还有遍历过程中,输出字符串的问题,我是用一个另外的字符串数组在建立trie树的时候就存下了所有的id对应的字符串,其实应该是可以在遍历的时候,记录下各个节点表示的字符从而达到输出目的的,这样其实可以更省空间。
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- SDUT 2134 数据结构实验之栈四:括号匹配
- 果断收藏!67句神奇的英语谚语集锦!
- 區域閾值(adaptiveThreshold)
- java虚拟机-JVM
- jgGrid的新增修改
- POJ
- 【Java每日一题】20170309
- Scrapy安装完成调试报错
- 使用母版页实现页面布局
- Java的算数运算符、关系运算符、逻辑运算符、位运算符
- 五、Sybase数据库操作汇总
- jar包下的资源路径问题
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- 安卓开发工程师必备技能——框架,看看你都掌握了哪些