题目链接:传送门
思路:使用map存储待查字符串即可,使用vector存储读入的键值,在读入数据后统一排序。
代码:
#include <bits/stdc++.h>
using namespace std;
map <string , vector<string> > mp[6];
vector <string> v[6];
int main() {
int n;
ios::sync_with_stdio(0);
cin >> n;
cin.get();
for(int i = 0 ; i < n ; i++) {
string a , b , c , d , e , f;
getline(cin , a);
getline(cin , b);
getline(cin , c);
getline(cin , d);
getline(cin , e);
getline(cin , f);
if(!mp[1].count(b)) {
v[1].push_back(b);
}
mp[1][b].push_back(a);
if(!mp[2].count(c)) {
v[2].push_back(c);
}
mp[2][c].push_back(a);
if(!mp[4].count(e)) {
v[4].push_back(e);
}
mp[4][e].push_back(a);
if(!mp[5].count(f)) {
v[5].push_back(f);
}
mp[5][f].push_back(a);
stringstream ss(d);
string t;
while(ss >> t) {
if(!mp[3].count(t)) {
v[3].push_back(t);
}
mp[3][t].push_back(a);
}
}
for(int i = 1 ; i <= 5 ; i++) {
for(int j = 0 ; j < v[i].size() ; j++) {
sort(mp[i][v[i][j]].begin() , mp[i][v[i][j]].end());
}
}
int m;
cin >> m;
cin.get();
while(m--) {
string t;
getline(cin , t);
int num = t[0] - '0';
cout << t << "\n";
string tmp = t.substr(3);
for(int i = 0 ; i < mp[num][tmp].size() ; i++) {
cout << mp[num][tmp][i] << endl;
}
if(!mp[num][tmp].size())cout << "Not Found\n";
}
return 0;
}