HDOJ-1251
统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 30259 Accepted Submission(s): 11770Problem DescriptionIgnatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
Output对于每个提问,给出以该字符串为前缀的单词的数量.
Sample InputbananabandbeeabsoluteacmbabbandabcSample Output2310
用map可用很方便的解决这种前缀问题,每当输入一个字符时前缀就会变化,此时相对应的前缀数量+1,每换一行则将前缀记录初始化,直到循环结束。
附AC代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<map> 6 using namespace std; 7 8 int main(){ 9 char a; 10 string s; 11 map<string,int> m;//定义map容器 12 while(1){ 13 scanf("%c",&a); 14 15 if(a=='\n'){//当读到回车时执行下一行元素输入 16 scanf("%c",&a); 17 s="";//初始化s 18 } 19 if(a=='\n')//当读到连续两个回车时跳出循环 20 break; 21 s+=a; 22 m[s]+=1;//相应前缀加一 23 } 24 while(cin>>s){//根据前缀输出 25 printf("%d\n",m[s]); 26 } 27 return 0; 28 }