题目大意
有一个长度为N的couple list,列表上每一行的人都互为情侣,现在有M个人来参加晚会,需要按顺序给出没有伴侣的嘉宾
算法思路
使用一个map记录每一个人的couple,对于输入的所有的客人,只要没有出现在couple中,就说明是单身,添加进singles数组中,如果出现在了couple中但是其伴侣不在来访嘉宾中,说明此人也是单身,添加进singles数组中,最后输出singles数组即可。
提交结果
AC代码
#include<cstdio>
#include<unordered_map>
#include<set>
#include<vector>
using namespace std;
unordered_map<int,int> couples;
int main() {
int n;
scanf("%d",&n);
for(int i=0;i<n;++i){
int a,b;
scanf("%d %d",&a,&b);
couples[a+1] = b+1;
couples[b+1] = a+1;
}
int m;
scanf("%d",&m);
set<int> guests;
for(int i=0;i<m;++i){
int a;
scanf("%d",&a);
guests.insert(a+1);
}
vector<int> singles;
for(auto it:guests){
if(couples[it]==0){
// 没有出现在couple list上
singles.push_back(it);
}else if(guests.find(couples[it])==guests.end()){
// 出现在了couple list上,但是另外一半没有来
singles.push_back(it);
}
}
printf("%lu\n",singles.size());
for(int i=0;i<singles.size();++i){
printf("%05d",singles[i]-1);
if(i<singles.size()-1){
printf(" ");
}
}
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。