PAT甲级1022 Digital Library
题目: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的更多相关文章
- pat 甲级 1022. Digital Library (30)
1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Di ...
- PAT 甲级 1022 Digital Library (30 分)(字符串读入getline,istringstream,测试点2时间坑点)
1022 Digital Library (30 分) A Digital Library contains millions of books, stored according to thei ...
- PAT 甲级 1022 Digital Library
https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 A Digital Library cont ...
- PAT Advanced 1022 Digital Library (30 分)
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- PAT甲级——A1022 Digital Library
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- PAT A 1022. Digital Library (30)【结构体排序检索】
https://www.patest.cn/contests/pat-a-practise/1022 直接模拟, 输入,按id排序,检索 #include <iostream> #incl ...
- 1022 Digital Library——PAT甲级真题
1022 Digital Library A Digital Library contains millions of books, stored according to their titles, ...
- PAT 1022 Digital Library[map使用]
1022 Digital Library (30)(30 分) A Digital Library contains millions of books, stored according to th ...
- 1022 Digital Library (30 分)
1022 Digital Library (30 分) A Digital Library contains millions of books, stored according to thei ...
随机推荐
- 函数语法:JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度(转载)
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- 【汇总目录】Git
基础教程 [2019年03月26日] 推送提交(git push) [2019年03月26日] 远程分支 [2019年03月26日] 基本的合并冲突处理 [2019年03月25日] 基本的分支与合并操 ...
- mysql 时间格式转换
1.varchar 转 datetime 格式 DATE_FORMAT(time,'%Y-%m-%d %H:%m:%s'); 2.时间减去一小时 DATE_FORMAT(date_add(time ...
- Web从入门到放弃<6>
<1> Canvas. 1,灰度图: js: function showAsGray() { var imgNode = document.getElementById('img'); ...
- 【转】协同开发中SVN使用规范试用
转自:http://www.cnblogs.com/BraveCheng/archive/2012/07/02/2573617.html 协同开发中SVN使用规范试用 目标,要求 本次svn提交规范主 ...
- codeforces 1082G - Petya and Graph 最大权闭合子图 网络流
题意: 让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个. 题解: 对于每个边建一个点,然后就是裸的最大权闭合子图, 结果比赛的时候我的板子太丑,一直T,(不会当前弧优 ...
- 详解HTTPS、TLS、SSL
HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3.下 ...
- vue-i18n国际化在data中切换不起作用
vue-i18n是一个针对于vue的国际化插件,使用非常简单,具体使用方式看我细细道来. 实现方式 1. 下载包 npm install vue-i18n 2. 配置 在main.js文件中加入如下配 ...
- 计算机基础 & python基础
五大组成部分 控制器 运算器(数学运算+逻辑运算) 存储器(存取数据) 输入设备(键盘.鼠标等) 输出设备(显示器.打印机等) CPU CPU=运算器+控制器 CPU的分类: 精简指令集(RISC): ...
- 《剑指offer》把数组排成最小的数
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结: