PAT 1022 Digital Library
题目大意是输入N个图书信息,每一个图书信息包括id,title; author;key;publisher; year;然后输入M个询问,每次询问输入的是title; author;key;publisher; year其中一种,从N个图书信息中找到符合条件的,按id顺序输出符合条件的id。
模拟即可,有两点需要注意:
1.要注意id,title; author;key;publisher; year,最好都用字符串,有些还有字符串之间有空格,因此我们应该用getline(cin,s);来获取输入,而需要注意的是cin>>N;
cin>>M,会留下一个回车,我们需要一个字符串把这个回车给吞掉,否则会影响id,title; author;key;publisher; year;的输入。
int N;cin>>N;string dummy;getline(cin, dummy);int M;cin>>M;string d1;getline(cin, d1);
2.当询问是key的时候,只需要图书信息中的key的某一部分满足询问的key即可。
因此:
for(int i=0;i<N;i++){//int cnt=0;for(int j=0;j<book[i].key.size();j++){if(book[i].key[j]==' '){cnt=0;continue;}if(book[i].key[j]==s[cnt]){cnt++;} if(cnt==s.size()){//匹配成功cout<<book[i].id<<endl;flag=1;break;}}}
进行一个字符串匹配。
#include <iostream>
#include <limits.h>
#include <cstring>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
//
int N;
struct node
{string id;string title;string author;string key;string publisher;string year;
}book[1005];
bool cmp(node a,node b)
{if(a.id<b.id){return true;}else{return false;}
}
bool flag;
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>N;string dummy;getline(cin, dummy); // 吸收 N 后面的回车for(int i=0;i<N;i++){getline(cin,book[i].id);getline(cin,book[i].title);getline(cin,book[i].author);getline(cin,book[i].key);getline(cin,book[i].publisher);getline(cin,book[i].year);}sort(book,book+N,cmp); int M;cin>>M;string d1;getline(cin, d1);for(int i=1;i<=M;i++){string a;flag=0;getline(cin,a);string s;if(a[0]-'0'==1){for(int i=3;i<a.size();i++){s+=a[i];}cout<<"1: "<<s<<endl;//找数据中哪一个与它相同 for(int i=0;i<N;i++){if(book[i].title==s){//cout<<"1: "<<s<<endl;cout<<book[i].id<<endl;flag=1;}}}else if(a[0]-'0'==2){for(int i=3;i<a.size();i++){s+=a[i];}cout<<"2: "<<s<<endl;//找数据中哪一个与它相同 for(int i=0;i<N;i++){if(book[i].author==s){//cout<<"2: "<<s<<endl;cout<<book[i].id<<endl;flag=1;}}}else if(a[0]-'0'==3){for(int i=3;i<a.size();i++){s+=a[i];}//找数据中哪一个与它相同 cout<<"3: "<<s<<endl;for(int i=0;i<N;i++){//int cnt=0;for(int j=0;j<book[i].key.size();j++){if(book[i].key[j]==' '){cnt=0;continue;}if(book[i].key[j]==s[cnt]){cnt++;} if(cnt==s.size()){//匹配成功cout<<book[i].id<<endl;flag=1;break;}}}}else if(a[0]-'0'==4){for(int i=3;i<a.size();i++){s+=a[i];}//找数据中哪一个与它相同cout<<"4: "<<s<<endl; for(int i=0;i<N;i++){if(book[i].publisher==s){//cout<<"4: "<<s<<endl;cout<<book[i].id<<endl;flag=1;}}}else{for(int i=3;i<a.size();i++){s+=a[i];}cout<<"5: "<<s<<endl;for(int i=0;i<N;i++){if(book[i].year==s){cout<<book[i].id<<endl;flag=1;}}} if(flag==0){cout<<"Not Found"<<endl;}}return 0;}