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 ...
随机推荐
- rand()函数 不同区间 整数和浮点数
C++中rand()范围[0,RAND_MAX] 1.生成整数随机数,a b均为整数,且 [a,b)---rand()%(b-a)+a [a,b] ---rand()%(b-a+1)+a (a ...
- 动态代理+静态代理+cglib代理 详解
代理定义:代理(Proxy):是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 动态代理+静态 ...
- 线程不安全(Arraylist,HashSet,HashMap)和写时复制
package com.yangyuanyuan.juc1205; import java.util.List; import java.util.Map; import java.util.Set; ...
- 小希的迷宫B - B
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...
- Codeforces Round #625 (Div. 2)
Contest Info Practice Link Solved A B C D E F 4/6 O O Ø Ø O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 Sol ...
- 2019牛客暑期多校训练营(第十场)E-Hilbert Sort(分形)
>传送门< 题意 现给出你 $n $个坐标和 $k$,让你根据$ k$阶 希尔伯特曲线的走向排列给出的 $n $个坐标 希尔伯特曲线如下: $k=1$ $k=2$ $k=3$可以将边长为 ...
- 2019 Multi-University Training Contest 1 Path(最短路+最小割)
题意:给你n个点 m条边 现在你能够堵住一些路 问怎样能让花费最少且让1~n走的路比最短路的长度要长 思路:先跑一边最短路 建一个最短路图 然后我们跑一边最大流求一下最小割即可 #include &l ...
- Chocolate Bunny CodeForces - 1407C 思维
题意: 交互题 题目输入一个n,你需要输出一个满足要求的[1,n]的排列. 你可以最多询问2*n次来确定你要输出的排列·中每一个位置的值 每一次询问格式为"? a b" 它会回复你 ...
- bzoj3626: [LNOI2014]LCA (树链剖分+离线线段树)
Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. ...
- C. New Year Book Reading
New Year is coming, and Jaehyun decided to read many books during 2015, unlike this year. He has n b ...