前言
正文
参考题解一:
暴力解法
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
/* 题意:给出n本书的id,书名等相关信息,随后进行m次查询,每次查询按照 相应的查询条件查询所有满足该条件的书本,并按照它们的id进行升序排序 思路: 1、首先用结构体数组对所有书籍进行存储并按照id进行升序排序 2、进行m次查询,每次遍历书本,将对应满足条件的书籍的id输出 */
const int N=1e4+10;
struct Book{
string id;
string title;
string author;
string keys;
string publisher;
string year;
}books[N];
bool cmp(Book a,Book b){
return a.id<b.id;
}
int n,m;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
char ch;
cin>>n;
for(int i=0;i<n;i++){
cin>>books[i].id;
cin.get(ch);//读取换行
getline(cin,books[i].title);
getline(cin,books[i].author);
getline(cin,books[i].keys);
getline(cin,books[i].publisher);
cin>>books[i].year;
}
sort(books,books+n,cmp);
cin>>m;
cin.get(ch);
string temp,tt;
char flag;
for(int i=0;i<m;i++){
getline(cin,temp);
tt=temp.substr(3);
flag=temp[0];
cout<<temp<<endl;
switch(flag){
case '1':{
int j=-1;
for(int i=0;i<n;i++){
if(books[i].title==tt){
cout<<books[i].id<<endl;
j=i;
}
}
if(j==-1)cout<<"Not Found"<<endl;
break;
}
case '2':{
int j=-1;
for(int i=0;i<n;i++){
if(books[i].author==tt){
cout<<books[i].id<<endl;
j=i;
}
}
if(j==-1)cout<<"Not Found"<<endl;
break;
}
case '3':{
int j=-1;
for(int i=0;i<n;i++){
if(books[i].keys.find(tt)!=string::npos){
cout<<books[i].id<<endl;
j=i;
}
}
if(j==-1)cout<<"Not Found"<<endl;
break;
}
case '4':{
int j=-1;
for(int i=0;i<n;i++){
if(books[i].publisher==tt){
cout<<books[i].id<<endl;
j=i;
}
}
if(j==-1)cout<<"Not Found"<<endl;
break;
}
case '5':{
int j=-1;
for(int i=0;i<n;i++){
if(books[i].year==tt){
cout<<books[i].id<<endl;
j=i;
}
}
if(j==-1)cout<<"Not Found"<<endl;
break;
}
default:
break;
}
}
return 0;
}
参考题解二: