题解
题目过长直接放原题链接
这一题使用map就可以过,注意一点就是id是一个七位数字,可能出现000001这样0开头的情况,输出的时候应该使用printf("%07d\n",*id)
补足七位,没注意到的最后两个会报错,还有一点就是Query
函数的参数如果不使用引用的话可能会超时
#include <iostream>
#include <cstdio>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
void Query(map<string, set<int> > &q, string &s);
map<string, set<int> > title,author,keyw,publi,year;
int N, q;
int main()
{
scanf("%d", &N);
for (int i=0; i<N; i++)
{
int id;
char tmp=' ';
string tit, aut,ke, pub, yea;
scanf("%d",&id);
getchar();
getline(cin, tit);
getline(cin, aut);
title[tit].insert(id);
author[aut].insert(id);
while(tmp == ' ')
{
cin >> ke;
keyw[ke].insert(id);
tmp = getchar();
}
getline(cin,pub);
getline(cin,yea);
publi[pub].insert(id);
year[yea].insert(id);
}
scanf("%d",&q);
for (int i=0; i<q; i++)
{
int num;
string tmp;
scanf("%d: ", &num);
getline(cin, tmp);
printf("%d: ",num);
cout << tmp << endl;
if (num == 1)
Query(title,tmp);
else if (num == 2)
Query(author,tmp);
else if (num == 3)
Query(keyw,tmp);
else if (num == 4)
Query(publi,tmp);
else
Query(year,tmp);
}
return 0;
}
void Query(map<string, set<int> > &q, string &s)
{
set<int>::iterator id;
if (q[s].size() == 0)
{
printf("Not Found\n");
return;
}
for (id=q[s].begin(); id!=q[s].end(); id++)
printf("%07d\n",*id);
}