#include <stdio.h>
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int N;
struct book
{
string id;
string sindex[10];
}b[10010];
set<string> keyword[10100];
map<string,int> mp;
int num=0;
bool cmp(book a, book b)
{
return a.id<b.id;
}
void split_s(string str,string id)
{
string temp="";
int pre=0;
for(int i=0;i<str.length();i++)
{
if(str[i]==' '||i==str.length()-1)
{
if(str[i]==' ')
{
temp=str.substr(pre,i-pre);
}
else
{
temp=str.substr(pre,i-pre+1);
}
pre=i+1;
if(mp.find(temp)==mp.end())
{
mp[temp]=num++;
}
int ki=mp[temp];
keyword[ki].insert(id);
}
}
}
int main()
{
cin>>N;
getchar();
for(int i=0;i<N;i++)
{
string id;
getline(cin,id);
b[i].id=id;
for(int j=1;j<=5;j++)
{
getline(cin,b[i].sindex[j]);
}
split_s(b[i].sindex[3],id);
}
sort(b,b+N,cmp);
int K;
scanf("%d",&K);
for(int i=0;i<K;i++)
{
int qi;
string qkey="";
scanf("%d: ",&qi);
getline(cin,qkey);
cout<<qi<<": "<<qkey<<endl;
bool flag=false;
if(qi!=3)
{
for(int j=0;j<N;j++)
{
if(b[j].sindex[qi]==qkey)
{
cout<<b[j].id<<endl;
flag=true;
}
}
}
else
{
if(mp.find(qkey)!=mp.end())
{
int ki=mp[qkey];
for(set<string>::iterator it= keyword[ki].begin();it!=keyword[ki].end();it++)
{
cout<<*it<<endl;
flag=true;
}
}
}
if(!flag)
{
cout<<"Not Found"<<endl;
}
}
return 0;
}
PAT甲1022 Digital Library (30)(30 分)
最新推荐文章于 2020-07-01 21:05:22 发布