通过使用unordered_map<string,vector> 容器快速实现键值对的存取匹配和查找来完成本题
```#include<bits/stdc++.h>
#include<unordered_map>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 1e4 + 10;
unordered_map<string, vector<string>> ans;
string ns[N], qs[N];
//取出大写字符 即取出暗语
string str(string s1) {
//判断开头字符是否是小写字符 小写直接跳过
if(s1[0]>'Z'){
return "";
}
string s = "";
for (int i = 0; i < s1.size(); i++) {
if (s1[i] <= 'Z') {
s += s1[i];
}
}
return s;
}
void solve() {
int n, q;
cin >> n >> q;
//输入待匹配字符串
for (int i = 0; i < n; i++) {
cin >> ns[i];
string s=str(ns[i]);
//判断暗语数量是否为0
if (s.size() != 0) {
ans[s].push_back(ns[i]);
}
}
for (int i = 0; i < q; i++) {
cin >> qs[i];
//暗语key==0 这证明没有与之对应的字符串
if (ans.count(qs[i]) == 0) {
cout << 0 << endl;
}
else {
cout << ans[qs[i]].size() << endl;
//逐个输出暗语对应的单词
for (int j = 0; j < ans[qs[i]].size(); j++) {
cout << ans[qs[i]][j] << endl;
}
}
}
}
int main() {
IOS;
int _ = 1;
//cin >> _;
while (_--) {
solve();
}
return 0;
}