L1-020 帅到没朋友
题目:
输入格式:
输入第一行给出一个正整数n
(≤100),是已知朋友圈的个数;随后n
行,每行首先给出一个正整数k
(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个id号,为5位数字(从00000到99999),id间以空格分隔;之后给出一个正整数m
(≤10000),为待查询的人数;随后一行中列出m
个待查询的id,以空格分隔。
注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有k
超过1的朋友圈里都至少有2个不同的人。
输出格式:
按输入的顺序输出那些帅到没朋友的人。id间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出no one is handsome
。
注意:同一个人可以被查询多次,但只输出一次。
输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
输出样例1:
10000 88888 23333
输入样例2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4 55555 44444 22222 11111
输出样例2:
no one is handsome
思路:
用一个集合set存储所有人,不过如果这个朋友圈的人数是1,那么这个人就不存入集合(朋友圈只有一个人的人直接做没有朋友圈处理)。然后在这个集合查找要找的人,如果没有找到,就将这个人存入另一个集合set并输出,在进行查找之前要先查找这第二个集合看这个人是否已经被输出过了。设置一个flag,flag==1或0代表是否有人被输出,如果没有人被输出则输出no one is handsome
。
知识点for me:
1、使用set进行存储是因为它有一个方法可以直接查找集合中的值。以set<int> s为例:s.find(2) != s.end()代表找到了2这个元素,s.find(2) == s.end()代表没找到,s.end()表示s的最后⼀个元素的下⼀个元素所在的位置。
上代码:
#include <iostream> #include <set> using namespace std; int main() { int a,b; string s; cin>>a; set<string> set,out; for(int i=0;i<a;i++) { cin>>b; if(b==1){ cin>>s; }else{ for(int j=0;j<b;j++) { cin>>s; set.insert(s); } } } int n; int flag=0; string m; cin>>n; for(int i=0;i<n;i++) { cin>>m; if(set.find(m)==set.end()&&out.find(m)==out.end()) { if(flag==1){ cout<<" "; } out.insert(m); flag=1; cout<<m; } } if(flag==0) { cout << "no one is handsome"; } return 0; }