题目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. 不定参数对arguments对象的影响

    如果声明函数时定义了不定参数,则在函数被调用时,arguments对象包含了所有传入的参数: function checkArgs(...args){ console.log(args.length, ...

  2. ng-app&data-ng-app

    来源stackoverflow 区别:在验证html5时,ng-app会抛出一个错误,而对带data-前缀的特性不会抛出.其它方面这两个属性一样.

  3. OpenCV3编程入门读书笔记4-形态学滤波

    一.腐蚀和膨胀 1.腐蚀和膨胀的主要功能 (1)消除噪声 (2)分割出独立的图像元素,在图像中连接相邻的元素 (3)寻找图像中的极大值或者极小值区域 (4)求出图像的梯度 2.膨胀(dilate) 膨 ...

  4. open live write 代码高亮插件的配置和使用

    第一步:下载open live writer插件,下载地址:http://www.cnblogs.com/memento/p/5995173.html 第二步:找到open live writer的安 ...

  5. P4147 玉蟾宫--单调栈

    P4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子 ...

  6. verilog 仿真时读取txt文件

    :]data; initial begin # clk =; clk = ~clk; end initial begin # rst=; # rst=; end :]data_sin[:]; //// ...

  7. jdbc中的sql注入

  8. 剑指offer字符串1

    面试题5:替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. class Solu ...

  9. 网页布局之grid

    学习网格布局时,你可能会在网络上看到很多文章,内容不同,属性不同,真是让人摸不着头脑,到底哪个才是正确的?看了本篇文章,我想你会豁然开朗.比如,一会儿用grid-rows,一会儿用grid-defin ...

  10. centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'

    centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法 3.7版本需要一个新的包libffi-de ...