#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<string.h>
#include<cmath>
#include<string>
using namespace std;
//
/*************************
题意:
给一堆书本的信息
再给一堆查询序列
查询出符合条件的书本ID
*************************/
/************************
求解要点:
普通的大型字符串处理题,细节比较重要,包括以下细节:
1.关键字是一个字符串数组,找到其中一个关键字就算对了
故存储关键字时用vector存,会涉及字符串分割
2.书本ID是7位ID,若存储时为int,则输出时要记得补0。
3.注意升序输出ID。
************************/
/***********************
笔记:
1.记住若有一个vector是暂存的变量,再次使用它前请先clear他
2.若说给出了7位digita,一定要小心输出时要补0
即printf(%07d)
*********************/
#define M 100005
#define INF 0xfffff
struct Book{
int id;
string title;
string author;
vector<string> keyword;
string publisher;
string pubyear;
};
vector<Book> vbook;
int main()
{
int n,m;
int i,j;
cin>>n;
Book pbook;
string skey;
int pl,pr;
for(i=0;i<n;i++)
{
pbook.keyword.clear();
cin>>pbook.id;
getchar();
getline(cin,pbook.title);
getline(cin,pbook.author);
getline(cin,skey);
//字符串分割
pl=0;
while((pr = skey.find(" ",pl)) != skey.npos )
{
pbook.keyword.push_back(skey.substr(pl,pr-pl));
pl =pr+1;
}
pbook.keyword.push_back(skey.substr(pl));
getline(cin,pbook.publisher);
getline(cin,pbook.pubyear);
vbook.push_back(pbook);
}
string ques;
int cmd;
scanf("%d",&m);
vector<int> vans;
while(m--)
{
vans.clear();
scanf("%d: ",&cmd);
getline(cin,ques);
for(i=0;i<n;i++)
{
switch(cmd)
{
case 1: if(vbook[i].title==ques)
vans.push_back(vbook[i].id);
break;
case 2: if(vbook[i].author==ques)
vans.push_back(vbook[i].id);
break;
case 3: for(j=0;j<vbook[i].keyword.size();j++)
if(vbook[i].keyword[j] == ques)
{
vans.push_back(vbook[i].id);
break;
}
}
break;
case 4: if(vbook[i].publisher==ques)
vans.push_back(vbook[i].id);
break;
case 5: if(vbook[i].pubyear==ques)
vans.push_back(vbook[i].id);
break;
}
}
cout<<cmd<<": "<<ques<<endl;
sort(vans.begin(),vans.end());
for(i=0;i<vans.size();i++)
printf("%07d\n",vans[i]);
if(vans.size()==0)
cout<<"Not Found"<<endl;
}
return 0;
}