统计难题
Posted zllwxm123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计难题相关的知识,希望对你有一定的参考价值。
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
Output对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
banana band bee absolute acm ba b band abc
Sample Output
2 3 1 0
字典树模板题
1 #include <bits/stdc++.h> 2 using namespace std; 3 int tree[1001000][26]; 4 int num[1001000]; 5 int pos = 1; 6 7 void insert(char *s){ 8 int root = 0; 9 for(int i=0;i<strlen(s);i++){ 10 int n = s[i]-‘a‘; 11 if(!tree[root][n]){ 12 tree[root][n] = pos++; 13 } 14 root = tree[root][n]; 15 num[root]++; 16 } 17 } 18 19 int find(char *s){ 20 int root = 0; 21 for(int i=0;i<strlen(s);i++){ 22 int n = s[i]-‘a‘; 23 if(!tree[root][n]){ 24 return 0; 25 } 26 root = tree[root][n]; 27 } 28 return num[root]; 29 } 30 31 int main() { 32 ios::sync_with_stdio(false); 33 cin.tie(0); 34 cout.tie(0); 35 char s[15]; 36 char c; 37 while(gets(s)){ 38 if(s[0]==NULL) 39 break; 40 insert(s); 41 } 42 while(gets(s)){ 43 cout<<find(s)<<endl; 44 } 45 return 0; 46 }
以上是关于统计难题的主要内容,如果未能解决你的问题,请参考以下文章