nyoj动物统计字典树
发布日期:2021-06-29 11:14:05 浏览次数:2 分类:技术文章

本文共 1798 字,大约阅读时间需要 5 分钟。

动物统计加强版时间限制:3000 ms  |  内存限制:150000 KB难度:4描述在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。输入第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。 输出输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。 样例输入10boarpigsheepgazellesheepsheepalpacaalpacamarmotmole样例输出sheep 3
#include
#include
#include
#include
#include
#include
using namespace std;const int MAXSIZE = 26;struct trieNode { int count; //记录该节点代表的单词的个数 trieNode * childrenNode[MAXSIZE]; };trieNode * root;trieNode * createTrieNode();void trieInsert(trieNode * root, char * str);//插入一个字符串 int trieSearch(trieNode * root, char * str);//查找一个字符串出现的次数 int main() { int length, judge, max_ = -9999999; char str[15], tempStr[15]; trieNode * root = createTrieNode();//创建字典树根节点 scanf("%d", &length); for (int i = 0; i < length; i++) { scanf("%s", str); trieInsert(root, str); judge = trieSearch(root, str); if (judge > max_) { max_ = judge; strcpy(tempStr, str); } //printf("%d\n", trieSearch(root, str)); } printf("%s %d\n", tempStr, max_); return 0;}trieNode * createTrieNode() { trieNode * tempNode = new trieNode(); tempNode->count = 0; for (int i = 0; i < MAXSIZE; i++) tempNode->childrenNode[i] = NULL; return tempNode;}void trieInsert(trieNode * root, char * str) { trieNode * node = root; char * p = str; while (*p) { if (node->childrenNode[*p - 'a'] == NULL) { node->childrenNode[*p - 'a'] = createTrieNode(); } node = node->childrenNode[*p - 'a']; p++; } node->count += 1;}int trieSearch(trieNode * root, char * str) { trieNode * node = root; char * p = str; while (*p && node != NULL) { node = node->childrenNode[*p - 'a']; p++; } if (node == NULL) return 0; else return node->count;}

转载地址:https://blog.csdn.net/ZWHSOUL/article/details/79925976 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:最近最久未使用(LRU)算法
下一篇:nyoj1101Oh, my God!错排公式

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月03日 09时02分14秒