# include <iostream>
# include <algorithm>
# include <string>
# include <set>
using namespace std;
int main() {
int num;
cin >> num;
string st;
set<string>s1;
while (num--) {
int num1 = 0;
cin >> num1;
if (num1 >= 2) {//只需要存有朋友的人即可
for (int i = 0;i < num1;i++) {
cin >> st;
s1.insert(st);
}
}
else {
cin >> st;
}
}
int num2;
cin >> num2;
string st1;
set<string>s2;
int f = 0;
while (num2--) {
cin >> st1;
//没有找到并且没有重复
if (s1.find(st1) == s1.end() && s2.find(st1) == s2.end()) {
s2.insert(st1);
//必须放入保证其不是重复的,是已经查找过的人,
//则不会再次输出,这个点不是说set是不存放重复数据这一特性可以控制的,
//因为这边进入if之后,不会重复放入容器中,但是,会照样输出该值,导致重复输出
if (f == 1) {
cout << " ";//控制输出格式
}
cout << st1;
f = 1;
}
}
if (f == 0) {
cout << "No one is handsome" << endl;
}
}
思路:
由于你所要找的是没有朋友的人,因此,在所给朋友圈中只存下所有有朋友的人,而没有朋友的人不需要存放他,最后查找的时候,当发现所查找的人不存在于我所存放的容器中,则输出此人。