1022 Digital Library

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are supposed to output the resulting books, sorted in increasing order of their ID's.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤104) which is the total number of books. Then N blocks follow, each contains the information of a book in 6 lines:

  • Line #1: the 7-digit ID number;
  • Line #2: the book title -- a string of no more than 80 characters;
  • Line #3: the author -- a string of no more than 80 characters;
  • Line #4: the key words -- each word is a string of no more than 10 characters without any white space, and the keywords are separated by exactly one space;
  • Line #5: the publisher -- a string of no more than 80 characters;
  • Line #6: the published year -- a 4-digit number which is in the range [1000, 3000].

It is assumed that each book belongs to one author only, and contains no more than 5 key words; there are no more than 1000 distinct key words in total; and there are no more than 1000 distinct publishers.

After the book information, there is a line containing a positive integer M (≤1000) which is the number of user's search queries. Then M lines follow, each in one of the formats shown below:

  • 1: a book title
  • 2: name of an author
  • 3: a key word
  • 4: name of a publisher
  • 5: a 4-digit number representing the year

Output Specification:

For each query, first print the original query in a line, then output the resulting book ID's in increasing order, each occupying a line. If no book is found, print Not Found instead.

Sample Input:

3
1111111
The Testing Book
Yue Chen
test code debug sort keywords
ZUCS Print
2011
3333333
Another Testing Book
Yue Chen
test code sort keywords
ZUCS Print2
2012
2222222
The Testing Book
CYLL
keywords debug book
ZUCS Print2
2011
6
1: The Testing Book
2: Yue Chen
3: keywords
4: ZUCS Print
5: 2011
3: blablabla

Sample Output:

1: The Testing Book
1111111
2222222
2: Yue Chen
1111111
3333333
3: keywords
1111111
2222222
3333333
4: ZUCS Print
1111111
5: 2011
1111111
2222222
3: blablabla
Not Found

题目大意:让你模拟一个图书管理系统,输入图书的编号,名称,作者,关键字,出版社,出版年份。然后给出M个查询,让你根据相应的查询输出对应的图书编号。

大致思路:仔细审题我们可以知道最后只让输出的是对应的图书的编号,因此我们建立名称,作者,关键字,出版社,出版年份和编号之间的映射关系,这个时候就可以考虑到map应为最后要按照大小由小到达输出相应的图书编号,如果在排序的话会超时,但是set和map内部由红黑树实现自带排序功能。所以我们可以用 map<string, set<int>> mpTitle, mpAutor, mpKey, mpPublisher, mpYear 建立映射关系。在执行m次查询操作的时候直接可以用一个查询函数用来查找对应集合 void query(map<string, set<int>> mp, string str) .在都如key_word时我们可以用 while(cin >> key_words) 同时注意吸收空格和换行,当输入换行时结束输入。这道题一定要注意字符串的读入在使用 getline() 之前一定要用 getchar() 吸收 scanf 的换行,同时在输出的时候要注意最后两组测试数据给出的id不是七位数字但我们要输出7位数字,要格式化输出id,在函数传参的时候一定要加引用不然最后一组数据会超时。

代码:

#include <bits/stdc++.h>

using namespace std;

map<string, set<int>> mpTitle, mpAutor, mpKey, mpPublisher, mpYear;

void query(map<string, set<int>> mp, string str) {
if (mp.find(str) == mp.end()) puts("Not Found");
for (auto ite : mp[str]) {
printf("%07d\n", ite);
}
} int main() {
int n;
scanf("%d", &n);
string title, author, key_words, publisher, year;
for (int i = 0; i < n; i++) {
int id;
scanf("%d", &id); getchar();
getline(cin, title);
mpTitle[title].insert(id); //建立书名和Id之间的映射
getline(cin, author);
mpAutor[author].insert(id);
while(cin >> key_words) {
mpKey[key_words].insert(id);
char ch = getchar(); //接受key_words之后的字符
if (ch == '\n') break;
}
getline(cin, publisher);
mpPublisher[publisher].insert(id);
getline(cin, year);
mpYear[year].insert(id);
}
int m; scanf("%d", &m);
while(m--) {
int id; string op;
scanf("%d: ", &id);
getline(cin, op);
cout << id << ": " << op << endl;
if (id == 1) query(mpTitle, op);
else if (id == 2) query(mpAutor, op);
else if (id == 3) query(mpKey, op);
else if (id == 4) query(mpPublisher, op);
else query(mpYear, op);
}
return 0;
}

1022 Digital Library——PAT甲级真题的更多相关文章

  1. PAT 甲级真题题解(1-62)

    准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format  模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...

  2. PAT 甲级真题

    1019. General Palindromic Number 题意:求数N在b进制下其序列是否为回文串,并输出其在b进制下的表示. 思路:模拟N在2进制下的表示求法,“除b倒取余”,之后判断是否回 ...

  3. 1080 Graduate Admission——PAT甲级真题

    1080 Graduate Admission--PAT甲级练习题 It is said that in 2013, there were about 100 graduate schools rea ...

  4. PAT甲级真题及训练集

    正好这个"水水"的C4来了 先把甲级刷完吧.(开玩笑-2017.3.26) 这是一套"伪题解". wacao 刚才登出账号测试一下代码链接,原来是看不到..有空 ...

  5. PAT 甲级真题题解(63-120)

    2019/4/3 1063 Set Similarity n个序列分别先放进集合里去重.在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分 ...

  6. PAT甲级真题 A1025 PAT Ranking

    题目概述:Programming Ability Test (PAT) is organized by the College of Computer Science and Technology o ...

  7. Count PAT's (25) PAT甲级真题

    题目分析: 由于本题字符串长度有10^5所以直接暴力是不可取的,猜测最后的算法应该是先预处理一下再走一层循环就能得到答案,所以本题的关键就在于这个预处理的过程,由于本题字符串匹配的内容的固定的PAT, ...

  8. 1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs

    前言: 本题是我在浏览了柳神的代码后,记下的一次半转载式笔记,不经感叹柳神的强大orz,这里给出柳神的题解地址:https://blog.csdn.net/liuchuo/article/detail ...

  9. PAT甲级真题打卡:1001.A+B Format

    题目: Calculate a + b and output the sum in standard format -- that is, the digits must be separated i ...

随机推荐

  1. 小白搭建WAMP详细教程---mysql安装与设置

    MySQL分为安装版和解压版.为了以后MySQL出问题想重装时会出现各种不必要的麻烦,我们这里选择解压版MySQL.详细步骤如下: 一:Mysql官网下载Mysql解压版 到官网下载,网址为:http ...

  2. HTML之form表单标签的学习

    from表单 表示 <form>form表单域</form> 作用 收集并替提交用户数据给指定服务器 属性 action:收集的数据的提交地址(也就是URL) method:收 ...

  3. C++的智能指针你了解吗?

  4. 4.PowerShell DSC核心概念之配置

    什么是配置 DSC 配置是定义某一特殊类型函数的 PowerShell 脚本. 配置的语法 Configuration MyDscConfiguration { #配置块 Import-DscReso ...

  5. 继承自List<T>的类通过NewtonJson的序列化问题

    什么问题? NewtonSoft.Json是我们最常用的Json组件库之一了.这里来讨论下使用NewtonSoft.Json序列化List<T>子类的情景.序列化使用了类JsonSeria ...

  6. HTTP笔记2--简单的HTTP 协议

    HTTP概念 HTTP用于客户端和服务器之间的通信 客户端:请求访问文本或图像等资源的一端 服务器端而提供资源响应的一端 通过请求和响应的交换达成通信 HTTP 协议规定,请求从客户端发出,最后服务器 ...

  7. cin 与 getline

    cin空格截断 getline(cin,s) 换行结束 ....太愚蠢了

  8. List遍历以及剔除指定数据

    一.list三种遍历方式 1.for循环 List<String> list = new ArrayList<String>(); list.add("A" ...

  9. Bootstrap微章

    给链接.导航等元素嵌套 span class="badge" 元素,可以很醒目的展示新的或未读的信息条目. <a href="#">Inbox &l ...

  10. hdu5303贪心

    http://acm.hdu.edu.cn/showproblem.php?pid=5303 说一下题目大意.. 有一个长为L的环..你家在原点位置0,那么剩下L-1个点上种有一些树, 给你树的位置和 ...