題目: 輸入格式: 輸入第一行給出一個正整數N(≤100),是已知朋友圈的個數;隨後N行,每行首先給出一個正整數K(≤1000),為朋友圈中的人數,然後列出一個朋友圈內的所有人——為方便起見,每人對應一個ID號,為5位數字(從00000到99999),ID間以空格分隔;之後給出一個正整數M(≤100 ...
題目:
輸入格式:
輸入第一行給出一個正整數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; }