一、题目
小明的一位同学是学霸,他的家中有很多藏书,真可谓汗牛充栋。小明想考一考学霸,给学霸出了一道难题。小明问这么多书籍,到底有多少本不一样的书,每样书的名字是什么?(因为有的书名是一样的,所以我们把它们视为同样的书)学霸就是学霸,张口就说出了答案。不知道你是否也是学霸?一起来挑战下!
输入格式
第一行是书籍总量n(1<=n<=1e6)。然后有n行书名(书名是一个英文字符串,字符串的长度小于100,中间没有空格)。
输出格式
第一行是不同书籍的数量,然后按照书名的字典序输出书名和数量。
样例输入
样例输出
二、解题思路
为何会想到用map映射解决这道题?
主要是看到输出格式中按照书名的字典顺序输出,如果不用映射输出(映射自带有排序功能,string类型的变量会按照字母顺序来输出),很难再想出输出会按照字母顺序输出。
敲代码时,需要注意
1、在输入输出过多时,不宜用cin cout进行输入输出,很容易超时,应该改用C语言正常使用的printf 和scanf进行输入和输出
2、使用map、set等stl库时,千万不要忘了头文件,和using namespace std;
3、使用map(string,int) a时,直接a[string]++,因为在int类型value没有初始化时,默认值就是0。