HDU1251-统计难题-map+输入
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
Output对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
banana band bee absolute acm ba b band abc
Sample Output
2 3 1 0
题意:
输入以该字符串为前缀的单词的数量。
注意输入:
scanf 以空格、换行符结束输入;
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中)
gets 是读取换行符的,不过它会把换行符转换为'\0'
gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替;
在数据大量的情况下,用gets读取快于scanf()10倍以上
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等。将接收输入的整个字符串直到遇到换行为止。
1 #include<stdio.h> 2 #include<map> 3 #include<iostream> 4 #include<string.h> 5 using namespace std; 6 typedef long long ll; 7 const int x=131; 8 const int N=1e6+20; 9 ll book[N]; 10 11 map<string,ll>mp; 12 char a[15]; 13 14 int main() 15 { 16 //string a; 17 while(1) 18 { 19 // cin>>a; 20 gets(a); 21 // if(a[0]=='\0') 22 // break; 23 int len=strlen(a); 24 if(len==0) 25 break; 26 string s; 27 s.clear(); 28 for(int i=0;i<len;i++) 29 { 30 // sum=sum*x+a[i]; 31 s+=a[i]; 32 mp[s]++; 33 } 34 } 35 36 while(cin>>a) 37 cout<<mp[a]<<endl; 38 return 0; 39 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」