很棒 HDU 1251 (字典树)
来源:互联网 发布:换声音的软件 编辑:程序博客网 时间:2024/05/16 13:47
分析:一道简单的字典树的题目,一开始用G++提交总是MLE ,尝试再写个释放内存的函数,竟然比原先的内存占用更大了。很无语。。。。后来改用C++提交竟然减少了一半内存,而且AC了。!!
#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX 50021typedef struct trie{ trie *next[26]; int v; //字符相同的个数}trie;trie *root;void creat_trie(char str[]){ int len = strlen(str); trie *p = root; for(int i=0; i<len; ++i) { int id = str[i]-'a'; if(p->next[id] == NULL) { p->next[id] = (trie *)malloc(sizeof(trie)); p->next[id]->v = 1; p = p->next[id];for(int j=0; j<26; ++j) p->next[j] = NULL; } else { p->next[id]->v++; p = p->next[id]; } }}int find_trie(char str[]){ int len = strlen(str);trie *pp = root;for (int i=0;i<len;i++){int id = str[i] - 'a';pp = pp->next[id];if(pp == NULL)return 0; //没有符合}return pp->v; // 此字符串为字符集中某串的前缀}int main(){int N,n,i,j,s,t,m,flag=0;int a,b,c,d;int sum;char str[15];root = (trie *)malloc(sizeof(trie));for (i=0;i<26;i++){root->next[i] = NULL;}while (gets(str) && str[0] != 0){creat_trie(str);}while (scanf("%s",str) != EOF){int k=find_trie(str);printf("%d\n",k);}//deal(root);return 0;}
代码2:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;struct trie{ trie *next[26]; int v; //字符相同的个数 trie() { memset(next,NULL,sizeof(next)); v=0; }};trie *root=new trie(),*p;void creat_trie(char *str){ int i,id; for(p = root,i=0;str[i]; ++i) { id = str[i]-'a'; if(p->next[id] == NULL) { p->next[id] = new trie(); }p = p->next[id];p->v++;}}int find_trie(char *str){int i,id;for (p=root,i=0;str[i];i++){id = str[i] - 'a';p = p->next[id];if(p == NULL)return 0;}return p->v; // 此字符串为字符集中某串的前缀}int main(){int N,n,i,j,s,t,m,flag=0;int a,b,c,d;int sum;char str[15];while (gets(str),*str){creat_trie(str);}while (gets(str)){printf("%d\n",find_trie(str));}return 0;}
统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 21634 Accepted Submission(s): 9249
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
注意:本题只有一组测试数据,处理到文件结束.
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
bananabandbeeabsoluteacmbabbandabc
Sample Output
2310
Author
Ignatius.L
0 0
- 很棒 HDU 1251 (字典树)
- hdu 1251(字典树)
- hdu 1251 字典树
- HDU 1251 字典树
- hdu 1251 字典树
- hdu 1251 字典树
- HDU-1251,字典树
- HDU 1251 字典树
- 1251 hdu 字典树
- HDU 1251(字典树)
- HDU 1251 字典树
- HDU 1251(字典树)
- HDU 1251 字典树
- hdu 1251 字典树
- HDU 1251 字典树
- 字典树 hdu 1251
- hdu 1251 字典树
- HDU 1251 字典树
- QuickSort(经典快排算法)
- 国外的一些技术网站
- 5.1.6 Same Tree
- 各种snmp服务修改启动
- 值得推荐的C/C++框架和库
- 很棒 HDU 1251 (字典树)
- 加速Java应用开发速度3——单元/集成测试+CI
- 2013年SAT真题精选
- Spark-streaming-杂
- Gradle学习系列之二——创建Task的多种方法
- Android中linux内核模块--开发设备驱动程序 && 上层接口实施
- SVN 冲突解决办法
- System.Threading.ThreadStateException
- 谷歌I/O 2015 android 新特性 Data Binding Library(一)