题意:每本书有id,书名,作者,keyword,出版社和出版年份,读入这些信息,用任意一个信息查询到所有相关的书
思路:map+字符串什么的各种存一下就可以了,注意id必须是7位,会有前导0,所以用int保存的话注意用%07d输出
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<string>
#include<vector>
using namespace std;
map<string,int > Map[5];
vector<int > list[5][10005];
int n,m;
int ll[5];
char str[10005],name[10005];
int main()
{
int i,j,a;
scanf("%d",&n);
for(i=0;i<5;i++)
Map[i].clear();
memset(ll,0,sizeof(ll));
for(i=0;i<n;i++)
{
int id;
scanf("%d",&id);
getchar();
//title
gets(str);
if(Map[0].find(str)==Map[0].end())
Map[0][str]=ll[0]++;
list[0][Map[0][str]].push_back(id);
//author
gets(str);
if(Map[1].find(str)==Map[1].end())
Map[1][str]=ll[1]++;
list[1][Map[1][str]].push_back(id);
//keyword
gets(str);
int temp=0;
for(j=0;str[j]!='\0';j++)
{
if(str[j]==' '&&temp!=0)
{
name[temp]='\0';
if(Map[2].find(name)==Map[2].end())
Map[2][name]=ll[2]++;
list[2][Map[2][name]].push_back(id);
temp=0;
}
else name[temp++]=str[j];
}
if(temp!=0)
{
name[temp]='\0';
if(Map[2].find(name)==Map[2].end())
Map[2][name]=ll[2]++;
list[2][Map[2][name]].push_back(id);
}
//publisher
gets(str);
if(Map[3].find(str)==Map[3].end())
Map[3][str]=ll[3]++;
list[3][Map[3][str]].push_back(id);
//year
gets(str);
if(Map[4].find(str)==Map[4].end())
Map[4][str]=ll[4]++;
list[4][Map[4][str]].push_back(id);
}
scanf("%d",&m);
getchar();
for(i=0;i<m;i++)
{
gets(str);
strcpy(name,str+3);
int id=str[0]-'0'-1;
puts(str);
if(Map[id].find(name)==Map[id].end())
puts("Not Found");
else
{
sort(list[id][Map[id][name]].begin(),list[id][Map[id][name]].end());
for(j=0;j<list[id][Map[id][name]].size();j++)
{
if(j!=0&&list[id][Map[id][name]][j]==list[id][Map[id][name]][j-1])
continue;
printf("%07d\n",list[id][Map[id][name]][j]);
}
}
}
return 0;
}