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 (<=10000) 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
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<string>
#include<set>
using namespace std;
map<string, set<int>> mp1, mp2, mp3, mp4, mp5;
void show(map<string, set<int>> &mp, string &key){
set<int> ::iterator it;
int find = ;
for(it = mp[key].begin(); it != mp[key].end(); it++){
printf("%07d\n", *it);
find = ;
}
if(find == )
printf("Not Found\n");
}
int main(){
int N, M, id;
string ss, ss2;
scanf("%d ", &N);
for(int i = ; i < N; i++){
scanf("%d ", &id);
getline(cin, ss);
mp1[ss].insert(id);
getline(cin, ss);
mp2[ss].insert(id);
while(cin >> ss){
char c = getchar();
mp3[ss].insert(id);
if(c == '\n')
break;
}
getline(cin, ss);
mp4[ss].insert(id);
getline(cin, ss);
mp5[ss].insert(id);
}
scanf("%d ", &M);
for(int i = ; i < M; i++){
getline(cin, ss2);
cout << ss2 + "\n";
ss = ss2.substr();
if(ss2[] == ''){
show(mp1, ss);
}else if(ss2[] == ''){
show(mp2, ss);
}else if(ss2[] == ''){
show(mp3, ss);
}else if(ss2[] == ''){
show(mp4, ss);
}else if(ss2[] == ''){
show(mp5, ss);
}
}
cin >> N;
return ;
}

总结:

1、题意:先输入书的id、名字、作者、关键词、出版社、出版时间。然后根据除书id以外的信息来查询书的id。注意其中书的关键词在输入时为一行字符串,其实是多个关键词以空格分开。由于一个信息可能对多本书(一个出版社有多本书...),且在查询结果时需要有序输出,所以可以使用 map<string ,  set<int>> 存储。

2、对于下面信息的第4行,需要分别读出每个单词,可以这么做

1111111
The Testing Book
Yue Chen
test code debug sort keywords
ZUCS Print
2011

  while(cin >> ss){
    char c = getchar();
    mp3[ss].insert(id);
    if(c == '\n')
    break;
  }

而当要用cin 读入带空格的一行时,可以 getline(cin , str);

3、在函数传参时,如果参数中有map、set、string等,应该传引用,否则可能会超时。

												

A1022. Digital Library的更多相关文章

  1. PAT甲级——A1022 Digital Library

    A Digital Library contains millions of books, stored according to their titles, authors, key words o ...

  2. 【算法笔记】A1022 Digital Library

    题意 输入n本书的信息:id,书名,作者,关键字,出版社,出版年份.搜索图书,输出id. 思路 定义5个map<string, set<int> >,分别存放Title, Au ...

  3. [PAT] A1022 Digital Library

    [题目大意] 给出几本书的信息,包括编号,名字,出版社,作者,出版年份,关键字:然后给出几个请求,分别按照1->名字,2->出版社等对应信息查询符合要求的书的编号. [思路] 模拟. [坑 ...

  4. 1022. Digital Library (30)

    A Digital Library contains millions of books, stored according to their titles, authors, key words o ...

  5. 1022. Digital Library (30) -map -字符串处理

    题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key w ...

  6. PAT1022.:Digital Library

    1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Di ...

  7. PAT 甲级 1022 Digital Library

    https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 A Digital Library cont ...

  8. PAT 1022 Digital Library[map使用]

    1022 Digital Library (30)(30 分) A Digital Library contains millions of books, stored according to th ...

  9. 1022 Digital Library (30)(30 point(s))

    problem A Digital Library contains millions of books, stored according to their titles, authors, key ...

随机推荐

  1. flask-admin 快速打造博客 系列一

    前言: 我想分享flask+flask-admin快速打造博客的详细教程,可是发现网易课堂已经有相应的免费课堂了,所以就不打算一点一滴的在这里做笔记,分享这些东西了.所以我主要集中在flask-adm ...

  2. Linux 小记 — Ubuntu 自动化配置

    前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...

  3. cometd简单用例

    准备工作 整个例子的源码下载:http://pan.baidu.com/s/1gfFYSbp 下载服务端jar文件 Comet4J目前仅支持Tomcat6.7版本,根据您所使用的Tomcat版本下载[ ...

  4. 数学建模-lingo使用

    1.安装启动,软件下载地址:http://pc.xzstatic.com/2017/06/LINGO14 .zip.此为免安装版,打开后双击Lingo11.exe即可启动软件. 2.示例:某商品单位成 ...

  5. github学习心得

    1.在GitHub上建立项目登录GitHub后,你可以在右边靠中那里找到一个按钮“New Repository”,点击过后,填入项目名称.说明和网址过后就可以创建.2.配置Git以及上传代码安装Git ...

  6. PAT L2-015 互评成绩

    https://pintia.cn/problem-sets/994805046380707840/problems/994805062432309248 学生互评作业的简单规则是这样定的:每个人的作 ...

  7. Show tree of processes in linux

    pstree(1): tree of processes - Linux man pagehttps://linux.die.net/man/1/pstree How to view process ...

  8. WIN10快捷键

    WIN10快捷键 多桌面切换:WIN + CTRL +  ←/→ 桌面横竖屏转向:ALT + CTRL +  ←/→

  9. Linux中gcc与g++编译器的区别

    一.对于C文件 对于C文件gcc和g++所做的事情确实是一样的,g++在编译C文件时调用了gcc. 二.对于C++文件 1.预处理 预处理gcc与g++做了相同的事. 2.编译 gcc无法自动和c++ ...

  10. Qt_深入了解信号槽(signal&slot)

    转自豆子空间 信号槽机制是Qt编程的基础.通过信号槽,能够使Qt各组件在不知道对方的情形下能够相互通讯.这就将类之间的关系做了最大程度的解耦. 槽函数和普通的C++成员函数没有很大的区别.它们也可以使 ...