hdoj 1251 统计难题
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
注意:本题只有一组测试数据,处理到文件结束.
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
banana
band
bee
absolute
acm
ba
b
band
abc
Sample Output
2
3
1
0
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 char str[20]; 5 int sum[1000000][26],num[1000000],cnt=1; 6 7 void add(){ 8 int root=0; 9 for(int i=0;str[i];i++){ 10 if(!sum[root][str[i]-'a']) 11 sum[root][str[i]-'a']=cnt++; 12 num[sum[root][str[i]-'a']]++; 13 root=sum[root][str[i]-'a']; 14 } 15 } 16 void find(){ 17 int root=0; 18 for(int i=0;str[i];i++){ 19 if(!sum[root][str[i]-'a']) 20 { root=0; 21 break; 22 } 23 root=sum[root][str[i]-'a']; 24 } 25 } 26 int main() 27 { int i; 28 scanf("%s",str[i]); 29 if(str[i]!='\n'){ 30 add();} 31 else { 32 scanf("%s",str); 33 find(); 34 } 35 36 return 0; 37 }