https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336

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 (≤10​4​​) 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 <bits/stdc++.h>
using namespace std; const int maxn = 1e4 + 10;
int N, M; struct Node {
int title;
string kind; // 1
string author; // 2
string keyword; // 3
string name; // 4
int year; // 5
bool flag = false;
}node[maxn]; int main() {
scanf("%d", &N); for(int i = 0; i < N; i ++) {
string s1, s2, s3, s4;
int t, n;
scanf("%d", &t); node[i].title = t;
cin.ignore();
getline(cin, s1); node[i].kind = s1;
getline(cin, s2); node[i].author = s2;
getline(cin, s3); node[i].keyword = s3;
getline(cin, s4); node[i].name = s4;
scanf("%d", &n); node[i].year = n;
} scanf("%d", &M);
cin.ignore();
while(M --) {
vector<int> ans;
ans.clear();
string s;
string rec = "";
getline(cin, s);
cout << s << endl;
int len = s.length();
for(int i = 3; i < len; i ++)
rec += s[i]; if(s[0] == '1') {
for(int i = 0; i <= N; i ++) {
if(node[i].kind == rec)
ans.push_back(node[i].title);
}
} else if(s[0] == '2') {
for(int i = 0; i < N; i ++) {
if(node[i].author == rec)
ans.push_back(node[i].title);
}
} else if(s[0] == '3') {
for(int i = 0; i < N; i ++) {
for(int j = 0; j < node[i].keyword.length(); j ++) {
if(node[i].keyword[j] != ' ' && (j == 0 || node[i].keyword[j - 1] == ' ')) {
if(node[i].keyword.substr(j, rec.length()) == rec)
{node[i].flag = true; continue;}
}
}
if(node[i].flag) {
ans.push_back(node[i].title);
node[i].flag = false;
}
}
} else if(s[0] == '4') {
for(int i = 0; i < N; i ++) {
if(node[i].name == rec)
ans.push_back(node[i].title);
}
} else {
int res = 0;
for(int i = 0; i <= 3; i ++)
res = res * 10 + (rec[i] - '0');
for(int i = 0; i < N; i ++) {
if(node[i].year == res)
ans.push_back(node[i].title);
}
} if(ans.size()) {
sort(ans.begin(), ans.end());
for(int i = 0; i < ans.size(); i ++)
printf("%07d\n", ans[i]);
} else printf("Not Found\n");
}
return 0;
}

  在 op == 3 的时候优化一下就不会超时了

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

  1. pat 甲级 1022. Digital Library (30)

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

  2. PAT 甲级 1022 Digital Library (30 分)(字符串读入getline,istringstream,测试点2时间坑点)

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

  3. PAT甲级1022 Digital Library

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 题意: 每一本书有一个id, 书名,作 ...

  4. PAT Advanced 1022 Digital Library (30 分)

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

  5. PAT甲级——A1022 Digital Library

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

  6. PAT A 1022. Digital Library (30)【结构体排序检索】

    https://www.patest.cn/contests/pat-a-practise/1022 直接模拟, 输入,按id排序,检索 #include <iostream> #incl ...

  7. 1022 Digital Library——PAT甲级真题

    1022 Digital Library A Digital Library contains millions of books, stored according to their titles, ...

  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 分)

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

随机推荐

  1. Spring之强制修改某个方法的行为(Arbitrary method replacement)

      A less commonly useful form of method injection than Lookup Method Injection is the ability to rep ...

  2. day1-课堂代码

    # # a = 1 # b = a # print(b) # # c = a + 1 # print(c) # # def add(x,y): # return x+y # # d = add(3,5 ...

  3. 利用RMAN恢复整个数据库

    利用RMAN恢复整个数据库案例一 适合场合:恢复的目录一致,同时备份的过程中有归档日志 恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志. 备份脚本: run ...

  4. Android Edittext聚焦时输入法挡住了EditText输入框的两种解决方案

    方案一.把整个布局文件用ScrollView套住.这样当你聚焦时虽然输入法也能够挡住一些输入框,但是你可以通过手动滑动看被挡住的内容. 方案二.在Activity中设置android:windowSo ...

  5. 20155217《网络对抗》Exp04 恶意代码分析

    20155217<网络对抗>Exp04 恶意代码分析 实践内容 使用schtasks指令监控系统运行 使用sysmon工具监控系统运行 使用virscan分析恶意软件 使用systrace ...

  6. 20155325 Exp2 后门原理与实践

    基础问答 例举你能想到的一个后门进入到你系统中的可能方式? 乱点链接 学电脑小白不正确配置电脑 下载非官网软件 例举你知道的后门如何启动起来(win及linux)的方式? 软件:ncat socat ...

  7. SpingMVC的<context:component-scan>包扫描踩坑记录

        公司项目配置的Spring项目的包扫描有点问题,出现了一个被Spring容器管理的Bean被创建了2次的现象.在此记录下解决的过程,方便后续查阅. 改动前: 容器启动监听器中会扫描全部包,创建 ...

  8. Retry模式

    Retry模式能够通过重复之前失败的操作来处理那些在调用远端服务或者网络资源的时候发生的一些可以预期的临时性的错误.Retry模式可以提高应用的稳定性. 问题 应用中,负责链接其他服务的组件必须要对环 ...

  9. Hadoop日记Day9---HDFS的java访问接口

    一.搭建Hadoop 开发环境 我们在工作中写完的各种代码是在服务器中运行的,HDFS 的操作代码也不例外.在开发阶段,我们使用windows 下的eclipse 作为开发环境,访问运行在虚拟机中的H ...

  10. camscanner(扫描全能王)功能解析与复现

    早就在用camscanner(扫描全能王)这个软件,感觉很不错. 主要功能: 1.页面截取校正 2.增强处理(灰度与颜色) 刚好最近工作与此相关,静心做点仿真,看看其中的操作原理,也做个demo玩玩. ...