1065シングル犬(25点)
「シングル犬は、」一人のための愛情の中国の用語です。この質問は、あなたは特別な注意を与えるために何千人もの人々の単一の大規模なパーティーからのゲストを見つけます。
入力フォーマット:
最初の行の入力がNの整数正(≤50 000)指定された、既知の結合/パートナーの数であり;次いで、N行は、各列は、カップル/パートナー与えられる-便宜のために、各ID番号に対応する、空間によるパーティションID(0万から99,999まで)の間、5桁、任意の正の整数の後にM(≤10 000)、当事者の総数は、その後M行ゲスト与えIDは、スペースで区切られました。トピックには重婚や足のボートを保証しません。
出力形式:
まず、ゲストの最初の合計数の単一の出力ラインと、第二の回線IDに続く単一のゲストに列挙された順序によってインクリメントされます。パーティションIDとの間のスペース、そして最後の行に余分なスペースを持っていないかもしれません。
サンプル入力:
。3
11111 22222
33333 44444
55555 66666
7。
55555 444,441,000,088,888 222,221,111,123,333
出力サンプル:
5
万23333 444,445,555,588,888
分析:
長い両方が存在するとして、それはまた、ラベル付けされなければならないとして、このデータのために我々は、彼らが他の徴候として存在するかどうかを判断するためにお互いにそれらをペアリングすることができます
#include <iostream>
#include <string>
#include <vector>
#include <set>
using namespace std;
int main()
{
int N;
cin>>N;
vector<int> couple(100000,-1);//存数组下标的对象
int a,b;
for(int i=0;i<N;i++){
cin>>a>>b;
couple[a]=b;
couple[b]=a;
}
int M;
cin>>M;
vector<int> guest(M),isExist(100000);//前者存客人,后者看客人是否有伴侣
for(int i=0;i<M;i++){
cin>>guest[i];
if(couple[guest[i]]!=-1){
isExist[couple[guest[i]]]=1;
}
}
set<int> pass;//存落单的人 用set可以自动排序很舒服
for(int i=0;i<M;i++){
if(isExist[guest[i]]!=1){
pass.insert(guest[i]);
}
}
printf("%d\n",pass.size());
/*for(int i=0;i<count-1;i++){
printf("%05d ",pass[i]);
}
printf("%05d",pass[count-1]);*/
//上面是错的set不能用数组的形式输出!!!看下面如何遍历输出set容器中的value
for(auto it=pass.begin();it!=pass.end();it++){
if (it != pass.begin()) printf(" ");
printf("%05d", *it);
}
return 0;
}