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. PHP判断用户是否手机访问

    自定义的函数如下: $agent = check_wap(); if( $agent ) { header('Location: http://www.nowamagic.net'); exit; } ...

  2. 问题解决:Apache: You don't have permission to access / on this server

    虚拟主机(Virtual Host)是指在一个机器上运行多个网络站点 (比如:www.company1.com和www.company2.com). 如果每个网络站点拥有不同的IP地址,则虚拟主机可以 ...

  3. 连接远程数据库ORACLE11g,错误百出!

    客户机中PLSQL DEV访问虚拟机中的ORACLE11g,错误百出! 创建时间: 2017/10/14 18:44 作者: CNSIMO 标签: ORACLE 忙了一下午,只有两个字形容:麻烦!   ...

  4. 【转】Python 可视化神器-Plotly Express

    转自:https://mp.weixin.qq.com/s/FNpNJSMK5Vs8pwi0PbbBzw 说明:图片无法直接复制,请查看原文 导读:Plotly Express 是一个新的高级 Pyt ...

  5. 关于javascript中对浮点加,减,乘,除的精度分析

    大学专业是计算机童鞋或多或小的知道 计算机是由二进制存储和处理数字的,不能精确到处理浮点数,且javascript也没有这样的方法 所以在浏览器计算的时候也会有误差,比如说 我想用 3.3 / 1.1 ...

  6. 微信小程序开发 [02] 页面注册和基本组件

    1.页面注册 既然我们希望跳转到新的页面,那自然要新建页面相关的文件才行.在开篇已经讲过,一个小程序页面由四个文件组成,假如我们的页面名为welcome,那么这四个文件则是: welcome.js w ...

  7. 第40章 CAN—通讯实验—零死角玩转STM32-F429系列

    第40章 CAN—通讯实验—零死角玩转STM32-F429系列   第40章     CAN—通讯实验 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视 ...

  8. 初识 ServiceWorker

    初识ServiceWorker 初识ServiceWorker 在8月份的时候.W3C更新了一个叫Service Workers的API. 了解过HTML5中的Web Worker的人可能会对这个AP ...

  9. 03-Maven坐标管理

    1.什么是坐标? 2.坐标的详细概念 3.Maven包引用

  10. C# online update demo

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...