POJ 2418 Hardwood Species Trie解法
来源:互联网 发布:湖南大学软件培训中心 编辑:程序博客网 时间:2024/05/18 00:54
计算一个字符串数组中有多少个重复字符串出现。
如果直接使用map容器,那么这条题就很简单了,一下就AC了,因为map已经处理好一切了;
不过时间超过1532ms,有点慢。
如下:
int main(){map<string, int> msi;int total = 0;char treeName[40];while (gets(treeName)){msi[treeName]++;total++;}for (map<string, int>::iterator it = msi.begin(); it != msi.end(); it++){string s = it->first;printf("%s ", s.c_str());printf("%.4f\n", (float)(it->second)/(float)total * 100.0f);}return 0;}
使用Trie可以加速到750ms。
本题注意就是节点孩子需要开到256个,十分大,因为输入没有注明是限定在上面字符范围内的,可以是空格,大小字符,也可以使其他字符,反正是ASCII都可能,故此需要开到256.
除此之外,就是一般的Trie操作,只需要使用插入和遍历操作就可以了。
#include <stdio.h>#include <string.h>#include <map>#include <string>using namespace std;const int ALP_SIZE = 256;struct Node{int n;//How many times apprearNode *arr[ALP_SIZE];Node() : n(0){for (int i = 0; i < ALP_SIZE; i++){arr[i] = NULL;}}~Node(){for (int i = 0; i < ALP_SIZE; i++){if (arr[i]) delete arr[i];}}};Node *Trie;//empty head node, not need for another structvoid insert(char ch[]){int len = strlen(ch);Node*pCrawl = Trie;for (int i = 0; i < len; i++){int id = ch[i];//if (' ' == ch[i]) id = 0;if (pCrawl->arr[id] == NULL){pCrawl->arr[id] = new Node;}pCrawl = pCrawl->arr[id];}pCrawl->n++;}/* 输入字符不知道,故此不能特殊处理void convertTolowerCase(char name[]){int len = strlen(name);for (int i = 0; i < len; i++){if ('A'<= name[i] && name[i] <= 'Z') name[i] = name[i] - 'A' + 'a';}}*/int total;char treeName[40];void printTrie(Node *r, int i = 0){if (!r) return ;if (r->n){for (int j = 0; j < i; j++){putchar(treeName[j]);}printf(" %.4f\n", (float)(r->n)/(float)total * 100.0f);}for (int j = 0; j < ALP_SIZE; j++){if (r->arr[j]){treeName[i] = j;printTrie(r->arr[j], i+1);}}}int main(){Trie = new Node;total = 0;while (gets(treeName)){insert(treeName);total++;}printTrie(Trie);delete Trie;return 0;}
1 0
- POJ 2418 Hardwood Species Trie解法
- poj 2418 Hardwood Species(Trie)
- poj 2418 Hardwood Species(数据结构:trie+dfs)
- poj 2418 Hardwood Species (trie 树)
- POJ 2418 Hardwood Species (trie树\map)
- poj 2418 Hardwood Species(Trie树)
- poj 2418 Hardwood Species
- POJ 2418 Hardwood Species
- poj 2418Hardwood Species
- POJ 2418 Hardwood Species
- poj 2418 Hardwood Species
- POJ 2418 Hardwood Species
- POJ 2418 Hardwood Species
- poj 2418Hardwood Species
- POJ 2418 Hardwood Species
- POJ 2418 Hardwood Species
- POJ 2418 Hardwood Species
- POJ 2418 Hardwood Species
- 开发婚恋交友类网站的13条军规
- poj 1018 Communication System
- Colored Sticks
- 开源如何使Android成为移动领域大佬
- java反射机制
- POJ 2418 Hardwood Species Trie解法
- 统计网页访问次数
- Struts2程序最少需要的jar
- 支付宝测试工程师电话面试情况
- 从VC6.0 到vs2008 出现的问题
- [ACM] POJ 3318 Matrix Multiplication (随机化算法)
- VC++ MFC编程学习笔记(4)
- 《Python入门》
- 漏洞科普:对于XSS和CSRF你究竟了解多少