#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m, s = 0, t = 0;
set<string> unlegal;
cin >> n >> m;
while(m--){
string str;
cin >> str;
unlegal.insert(str);
}
while(n--){
int num, flag = false;
string stu, thing;
vector<string> v;
cin >> stu >> num;
while(num--){
cin >> thing;
if(unlegal.find(thing) != unlegal.end()){
v.push_back(thing);
flag = true;
}
}
if(flag){
s++;
cout << stu << ":";
for(auto vi: v){
t++;
cout << " " << vi;
}
cout << endl;
}
}
cout << s << " " << t;
}
原来队列取元素是 front() 和 back() 而不是 stack 堆栈的 top() 。不过像这里直接用迭代器 foreach 也可以。