PAT1022. Digital Library (30)
两个坑。
一个是一直用的malloc不行了。因为malloc分配的是固定大小,之前做的题没遇到过是因为一般string都不长(malloc分配string为24个Byte),这次直接报段错误,呢们了半天。
第二个很无语,就是ID会有0,当int处理的时候把0消掉了,会有两个case不通过。
#include <iostream>
#include <vector>
#include <sstream>
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
struct Book{
string id;
string title;
string author;
vector<string> keyWords;
string publish;
int year;
};
int n,m;
string tmp;
string line;
vector<Book> bookSet;
map<string,vector<int> > mmT;
map<string,vector<int> > mmA;
map<string,vector<int> > mmK;
map<string,vector<int> > mmP;
map<int,vector<int> > mmY;
bool cmp(int a,int b){
return bookSet[a].id<bookSet[b].id;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
Book b;
cin>>b.id;
getline(cin,line);//cin没有读取回车
getline(cin,line);b.title=line;mmT[b.title].push_back(i);
getline(cin,line);b.author=line;mmA[b.author].push_back(i);
getline(cin,line);
stringstream ss(line);
while(ss>>tmp){
b.keyWords.push_back(tmp);
mmK[tmp].push_back(i);
}
getline(cin,line);b.publish=line;mmP[b.publish].push_back(i);
cin>>b.year;mmY[b.year].push_back(i);
bookSet.push_back(b);
}
int queN;
cin>>m;
for(int i=0;i<m;i++)
{
scanf("%d: ",&queN);
getline(cin,tmp);
int yea;
vector<int> logN;
switch(queN){
case 1:logN=mmT[tmp];break;
case 2:logN=mmA[tmp];break;
case 3:logN=mmK[tmp];break;
case 4:logN=mmP[tmp];break;
case 5:yea=stoi(tmp);logN=mmY[yea];break;
default:break;
}
printf("%d: ",queN);cout<<tmp<<endl;
sort(logN.begin(),logN.end(),cmp);
vector<int>::iterator ii=logN.begin();
while(ii!=logN.end()){
cout<<bookSet[(*ii)].id<<endl;
ii++;
}
if(logN.size()==0){
cout<<"Not Found"<<endl;
} } }
PAT1022. Digital Library (30)的更多相关文章
- PAT-1022 Digital Library (30 分) 字符串处理
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- PAT1022.:Digital Library
1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Di ...
- 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 ...
- 1022 Digital Library (30 分)
1022 Digital Library (30 分) A Digital Library contains millions of books, stored according to thei ...
- 1022. Digital Library (30)
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- 1022. Digital Library (30) -map -字符串处理
题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key w ...
- 1022 Digital Library (30)(30 point(s))
problem A Digital Library contains millions of books, stored according to their titles, authors, key ...
- 1022 Digital Library (30)(30 分)
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
随机推荐
- The Intriguing Obsession
C. The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input s ...
- javaScript Number对象
Number 对象 Number 对象是原始数值的包装对象. 创建 Number 对象的语法: var myNum=new Number(value); var myNum=Number(value) ...
- 统计TCP网络连接情况
#!/bin/bash metric=$1 tmp_file=/tmp/tcp_status.txt /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a i ...
- JavaScript中对事件简单的理解
事件(event) 1.什么是JavaScript事件? 事件是文档或浏览器中发生的特定交互瞬间. 2.事件流 事件流描述的是从页面中接受事件的顺序,包含IE提出的事件冒泡流与Netscape提出的事 ...
- Nginx服务监听端口修改启动bug
监听的端口从80 修改到其他端口出现启动不起来问题. 解决方案如下: yum install policycoreutils-python sudo cat /var/log/audit/audit. ...
- 如何转换指定 波长 到 RGB 颜色?
//指定波长转换成RGBA颜色 std::vector<int> lambdaToColor(double lambda,double gamma = 0.8,double intensi ...
- Python3 面向对象(1)
面向.概述 面向过程: 根据业务逻辑从上到下写垒代码面向过程的设计的核心是过程,过程即解决问题的步骤, 面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点: 极大降低了程序的 ...
- vue.js 拦截器
document.cookie = "mylogin=1";//1:登陆成功:保存登录状态 main.js router.beforeEach((to, from, next) = ...
- 0401-服务注册与发现、Eureka简介
一.硬编码问题 解决方案:nginx.或.服务注册与发现 二.服务发现 注册.心跳机制 三.服务发现组件的功能 1.服务注册表:是一个记录当前可用服务实例的网络信息的数据库,是服务发现机制的核心.服务 ...
- (扫盲)C#中out和ref之间的区别
首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ...