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

题意:

每一本书有一个id, 书名,作者,至多五个关键字,一个出版社名,出版社年份。

现在根据给定的书名或作者或关键字或出版社名或年份,按照id字典序大小输出符合条件的书。

思路:

对每一个属性都用map维护。

一个坑点是,前面说书的年份一定在1000-3000之间,但是查询的时候的年份不一定满足,而且这里输出的时候也要满足4位。测试点1就是和年份有关的。

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<string, string> pr; int n, m;
const int maxn = 1e4 + ; struct node{
string id;
string title;
string author;
string keyword[];
string publisher;
int year;
int keynum = ;
}book[maxn]; map<string, int>titlemp;
map<string, int>authormp;
map<string, int>keymp;
map<string, int>publishermp;
map<int, string>idmp;
int titletot, authortot, keytot, publishertot, idtot; vector<int> title[maxn], author[maxn], keyword[], publisher[], year[]; bool cmp(int a, int b)
{
int ida = stoi(idmp[a]), idb = stoi(idmp[b]);
return ida < idb;
} int main()
{
scanf("%d", &n);
for(int i = ; i < n; i++){
getchar();getline(cin, book[i].id);
idmp[i] = book[i].id; getline(cin, book[i].title);
if(titlemp.find(book[i].title) == titlemp.end()){
titlemp[book[i].title] = titletot++;
}
title[titlemp[book[i].title]].push_back(i);
getline(cin, book[i].author);
if(authormp.find(book[i].author) == authormp.end()){
authormp[book[i].author] = authortot++;
}
author[authormp[book[i].author]].push_back(i);
char ch;
while(){
cin>>book[i].keyword[book[i].keynum];
//cout<<book[i].keyword[book[i].keynum]<<endl;
if(keymp.find(book[i].keyword[book[i].keynum]) == keymp.end()){
keymp[book[i].keyword[book[i].keynum]] = keytot++;
}
keyword[keymp[book[i].keyword[book[i].keynum++]]].push_back(i);
ch = getchar();
if(ch == '\n')break;
}
getline(cin, book[i].publisher);
if(publishermp.find(book[i].publisher) == publishermp.end()){
publishermp[book[i].publisher] = publishertot++;
}
publisher[publishermp[book[i].publisher]].push_back(i);
cin>>book[i].year;
year[book[i].year - ].push_back(i);
} scanf("%d", &m);
while(m--){
int type;
scanf("%d: ", &type);
string s;
int id, y;
//getchar();
switch(type){
case :
getline(cin, s);
printf("1: ");cout<<s<<endl;
if(titlemp.find(s) == titlemp.end()){
printf("Not Found\n");
}
else{
id = titlemp[s];
sort(title[id].begin(), title[id].end(), cmp);
for(int i = ; i < title[id].size(); i++){
cout<<idmp[title[id][i]]<<endl;
}
}
break;
case :
getline(cin, s);
printf("2: ");cout<<s<<endl;
if(authormp.find(s) == authormp.end()){
printf("Not Found\n");
}
else{
id = authormp[s];
sort(author[id].begin(), author[id].end(), cmp);
for(int i = ; i < author[id].size(); i++){
cout<<idmp[author[id][i]]<<endl;
}
}
break;
case :
getline(cin, s);
printf("3: ");cout<<s<<endl;
if(keymp.find(s) == keymp.end()){
printf("Not Found\n");
}
//cout<<id<<endl;
else{
id = keymp[s];
sort(keyword[id].begin(), keyword[id].end(), cmp);
for(int i = ; i < keyword[id].size(); i++){
cout<<idmp[keyword[id][i]]<<endl;
}
}
break;
case :
getline(cin, s);
printf("4: ");cout<<s<<endl;
if(publishermp.find(s) == publishermp.end()){
printf("Not Found\n");
}
else{
id = publishermp[s];
sort(publisher[id].begin(), publisher[id].end(), cmp);
for(int i = ; i < publisher[id].size(); i++){
cout<<idmp[publisher[id][i]]<<endl;
}
}
break;
case :
cin>>s;
printf("5: ");cout<<s<<endl;
y = stoi(s);
if( y< || y > || year[y - ].size() == ){
printf("Not Found\n");
}
else{
sort(year[y - ].begin(), year[y - ].end(), cmp);
for(int i = ; i < year[y - ].size(); i++){
cout<<idmp[year[y - ][i]]<<endl;
}
}
break;
}
}
return ;
}

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 A Digital Library cont ...

  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. C#任务同步

    using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using ...

  2. yum安装mysql

    安装 CentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源 ...

  3. 求逆序对常用的两种算法 ----归并排 & 树状数组

    网上看了一些归并排求逆序对的文章,又看了一些树状数组的,觉得自己也写一篇试试看吧,然后本文大体也就讲个思路(没有例题),但是还是会有个程序框架的 好了下面是正文 归并排求逆序对 树状数组求逆序对 一. ...

  4. fiddler主要图标说明

    主要图标含义说明: 正在将请求数据发往服务器 正在从服务器下载返回数据 请求过程中暂停 返回过程中暂停 请求中使用了HTTP HEAD方法; 返回中应该没有body内容 请求中使用了HTTP CONN ...

  5. MariaDB:开启日志记录SQL

    1.开启日志 红色是命令,之下是回显. MariaDB [jksfrz]> SET GLOBAL log_output = 'TABLE'; Query OK, 0 rows affected ...

  6. 入坑C++之vs 新建C++项目

    首先呢,下载一个visual  studio 2017的编辑器工具,可能有最新的2019年的版本,根据自己喜欢选择哪个版本就好了 visual studio IDE下载地址:https://visua ...

  7. noj算法 8皇后打印 回溯法

    描述: 输出8皇后问题所有结果. 输入: 没有输入. 输出: 每个结果第一行是No n:的形式,n表示输出的是第几个结果:下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格.不同的结果中,先输出第 ...

  8. linux的时间问题

    在linux系统中时间分为修改时间(modify time 简写:mtime ),访问时间(access time 简写: atime),状态修改时间(change time 简写:ctime)三种: ...

  9. C++反汇编调试

    1.使用 OllyDBG打开的dll文件,最好找破解pro版本.不然没有编辑权限 ,目前OllyDBG并不支持eclipse IDE  64位编辑的 .class文件类型. 另外使用反编译的时候物理内 ...

  10. 读文件/写文件。http请求。读取文件列表。

    package transfor; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import j ...