HDU 1252 统计难题
2018-02-08 21:18
253 查看
统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 48352 Accepted Submission(s): 17085
[align=left]Problem Description[/align]Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
[align=left]Input[/align]输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
[align=left]Output[/align]对于每个提问,给出以该字符串为前缀的单词的数量.
[align=left]Sample Input[/align]banana
band
bee
absolute
acm
ba
b
band
abc
[align=left]Sample Output[/align]2
3
1
0
开始用链表做的,内存超了,后来换了数组,刚刚发现定义数组的时候 并没有分配内存,如果直接拿来用的话系统会直接默认值为0, 然后如果初始化数组为0的化,那么系统就会为数组的所有元素分配 存储空间,这样就会超时,但是既然默认值为0,这里就没有必要 初始化啦,这样一些没有用到的元素就不会占用空间,从而节省 大量内存。 代码: #include<bits/stdc++.h> using namespace std; int tire[1100002][26]; int num[1100002]; int pos=1; void insert(const char *s) { int c=0; while(*s!='\0') { int t=*s-'a'; if(tire[c][t]==0) tire[c][t]=pos++; c=tire[c][t]; num[c]++; s++; } } int search(const char *s) { int c=0; while(*s!='\0') { int t=*s-'a'; if(tire[c][t]==0) return 0; c=tire[c][t]; s++; } return num[c]; } int main() { char s[22]; //printf("%d %d\n",tire[1][1],tire[2][2]); //memset(tire,0,sizeof(tire)); //memset(num,0,sizeof(num));//不需要初始化 while(gets(s)) { if(s[0]==NULL)gets只读入一个回车时会存为NULL break; insert(s); } while(gets(s)) { printf("%d\n",search(s)); } return 0; }
相关文章推荐
- HDU 1251 统计难题
- hdu 1251 统计难题(字典树)
- hdu - problem 1251 统计难题【字典树】
- [ACM] hdu 1251 统计难题 (字典树)
- hdu 1251 统计难题(数据结构:trie)
- HDU 1251 统计难题(解题报告)
- hdu_1251 统计难题
- hdu 1251 统计难题
- hdu 1251 统计难题 字典树
- hdu_1251 统计难题 trie模版
- hdu-1251-统计难题(字典树)
- [ACM] hdu 1251 统计难题 (字典树)
- HDU 1251 统计难题
- HDU - 1251 统计难题(字典树)
- hdu 1251 统计难题 初识map
- HDU 1251统计难题 字典树
- HDU 1251 统计难题(字典数)
- hdu 1251 统计难题
- hdu 1251 统计难题
- HDU 1251 统计难题