1022 Digital Library——PAT甲级真题
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 Foundinstead.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甲级真题的更多相关文章
- PAT 甲级真题题解(1-62)
准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format 模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...
- PAT 甲级真题
1019. General Palindromic Number 题意:求数N在b进制下其序列是否为回文串,并输出其在b进制下的表示. 思路:模拟N在2进制下的表示求法,“除b倒取余”,之后判断是否回 ...
- 1080 Graduate Admission——PAT甲级真题
1080 Graduate Admission--PAT甲级练习题 It is said that in 2013, there were about 100 graduate schools rea ...
- PAT甲级真题及训练集
正好这个"水水"的C4来了 先把甲级刷完吧.(开玩笑-2017.3.26) 这是一套"伪题解". wacao 刚才登出账号测试一下代码链接,原来是看不到..有空 ...
- PAT 甲级真题题解(63-120)
2019/4/3 1063 Set Similarity n个序列分别先放进集合里去重.在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分 ...
- PAT甲级真题 A1025 PAT Ranking
题目概述:Programming Ability Test (PAT) is organized by the College of Computer Science and Technology o ...
- Count PAT's (25) PAT甲级真题
题目分析: 由于本题字符串长度有10^5所以直接暴力是不可取的,猜测最后的算法应该是先预处理一下再走一层循环就能得到答案,所以本题的关键就在于这个预处理的过程,由于本题字符串匹配的内容的固定的PAT, ...
- 1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs
前言: 本题是我在浏览了柳神的代码后,记下的一次半转载式笔记,不经感叹柳神的强大orz,这里给出柳神的题解地址:https://blog.csdn.net/liuchuo/article/detail ...
- PAT甲级真题打卡:1001.A+B Format
题目: Calculate a + b and output the sum in standard format -- that is, the digits must be separated i ...
随机推荐
- docker 安装 nexus3 初始密码不再是admin123
最近在docker上安装 nexus3 ,参照之前博客都提示 初始密码是admin/admin123 但是登录的时候出现如下提示: 很显然提示 admin用户的密码在/nexus-data/admi ...
- python函数的实例,书写一个创建有针对性的专用密码字典的程序
python学习,实战学习,函数的学习与使用,综合知识的运用.包括for ,while循环,if...else.. 和if... elif ... else 的条件判断! 问题描述:书写一个创建有针对 ...
- Linux远程拷贝scp
Linux的scp命令可以实现两台服务器之间互相拷贝文件,我的测试环境是Centos6.4. 基本的命令格式 scp 拷贝目标文件 远程用户@远程主机地址:远程目录 一.从本机拷贝到目标远程主机 # ...
- Luogu4168 蒲公英 (分块)
题目传送门 题意 长度为n的序列,有m次询问,每次询问求\([l,r]\) 间的众数,如果有多个,输出最小的那个 \(n\le 4\times 10^4,m\le 5\times 10^5,a_i\l ...
- KMP浅谈
关于KMP KMP其实是三个人名字的缩写,因为是他们同时发现的(大佬惹不起); KMP作为CSP考点,主要亮点是其优秀的匹配复杂度,而且消耗空间小,比起hash虽然有些局限性,但是因为其正确率 ...
- codeforces #345 (Div. 1) D. Zip-line (线段树+最长上升子序列)
Vasya has decided to build a zip-line on trees of a nearby forest. He wants the line to be as long a ...
- 洛谷P3796
题目链接 题意:有n个由小写字母组成的模式串以及一个文本串T.每个模式串可能会在文本串中出现多次.哪些模式串在文本串T中出现的次数最多. 题解:ac自动机模板加强版,开一个数组单独记录各个字符串出现 ...
- - Visible Trees HDU - 2841 容斥原理
题意: 给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树 题解: 用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到.不互质的话说明前 ...
- JavaScript——六
magin和padding的区别:https://www.cnblogs.com/zxnn/p/8186225.html magin:兄弟之间的 padding:父子关系 body和网页边框左右距离上 ...
- WSL2 准备dotnet core开发环境
首先我们要知道WSL Ubuntu的版本,以便进行下一步操作: 我的是18.04,所以安装dot net SDK我们参考这里: https://docs.microsoft.com/en-us/dot ...