写在前面

  • 思路分析
  • 数组couple[i] = j表示i的对象是j。初始化-1
  • 数组isExist表示某人对象是否来派对
  • 所有isExist不为1的⼈,对象没来派对。
  • 遍历所有⼈后插⼊集合set
  • set.size所求人数, set中所有数是所求的⼈递增排列
  • 题目简单,30分钟a题
  • 感觉题目硬扯​​Damn Single (单身狗)​
  • 聚会上孤单的人,不管是不是单身狗,,,

测试用例

  • 参考链接
input:
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
output:
5
10000 23333 44444 55555 88888

ac代码

#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main()
{
int n, a, b, m;
scanf("%d", &n);
vector<int> couple(100000);
for (int i = 0; i < 100000; i++)
couple[i] = -1;
for (int i = 0; i < n; i++)
{
scanf("%d%d", &a, &b);
couple[a] = b;
couple[b] = a;
}
scanf("%d", &m);
vector<int> guest(m), isExist(100000);
for (int i = 0; i < m; i++)
{
scanf("%d", &guest[i]);
if (couple[guest[i]] != -1)
isExist[couple[guest[i]]] = 1;
}
set<int> s;
for (int i = 0; i < m; i++)
if (!isExist[guest[i]]) s.insert(guest[i]);
printf("%d\n", s.size());
for (auto it = s.begin(); it != s.end(); it++)
{
if (it != s.begin()) printf(" ");
printf("%05d", *it);
}

return 0;
}