分析:id用string会在最后一个点超时,看了柳神博客醒悟传参传引用(不用复制)能快不少,actually,在最后一个点上快了十倍的时间。
#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
map<string, vector<int> > bname, bauthor, keywords, bpublisher, byear;
bool cmp(int a, int b){
return a < b;
}
void print(map<string, vector<int> > mp, string str){
if(!mp[str].size()){
printf("Not Found\n");
return;
}
sort(mp[str].begin(), mp[str].end(), cmp);
for(auto it = mp[str].begin(); it!=mp[str].end(); it++)
printf("%07d\n", *it);
}
int main(){
//freopen("aa.txt", "r", stdin);
int n, q, id;
string str, str2;
scanf("%d\n", &n);
for(int i = 1; i<=n; i++){
scanf("%d\n", &id);
getline(cin, str);
bname[str].push_back(id);
getline(cin, str);
bauthor[str].push_back(id);
while(cin >> str){
keywords[str].push_back(id);
if(getchar() == '\n') break;
}
getline(cin, str);
bpublisher[str].push_back(id);
getline(cin, str);
byear[str].push_back(id);
}
scanf("%d\n", &q);
for(int i = 0; i<q; i++){
getline(cin, str);
str2 = str.substr(3);
printf("%s\n", str.c_str());
switch(str[0]){
case '1': print(bname, str2);break;
case '2': print(bauthor, str2);break;
case '3': print(keywords, str2);break;
case '4': print(bpublisher, str2);break;
case '5': print(byear, str2);break;
}
}
return 0;
}