代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 100000;
int main() {
int n;
scanf("%d", &n);
int m[MAX] = {-1};
for(int i=0; i<n; i++) {
int a, b;
scanf("%d %d", &a, &b);
m[a] = b;
m[b] = a;
}
int q;
scanf("%d", &q);
int vis[MAX] = {0};
for(int i=0; i<q; i++) {
int t;
scanf("%d", &t);
vis[t] = 1;
}
vector<int> v;
for(int i=0; i<MAX; i++) {
if(vis[i]) {
if(m[i]==-1 || !vis[m[i]]) {
v.push_back(i);
}
}
}
sort(v.begin(), v.end());
printf("%d\n", v.size());
if(v.size()>0) {
printf("%05d", v[0]);
for(int i=1; i<v.size(); i++) {
printf(" %05d", v[i]);
}
printf("\n");
}
return 0;
}
注解
1、int m[MAX] = {-1};
这句始化很重要,因为map默认值为0,如果不进行初始化,当输入数据有00000时就会有一个case是错误!
2、下面这句判断条件很重要,有两种条件都是单身狗:
(1)本身就无伴侣
(2)有伴侣,但伴侣没有来参加
if(m[i]==-1 || !vis[m[i]]) {
v.push_back(i);
}
3、printf(" %05d", v[i]);
这个输出格式很重要,前导0一定记得不要忘记。
4、<key、value>对的思想要深入人心。m[a]=b,表示a的伴侣是b。
for(int i=0; i<n; i++) {
int a, b;
scanf("%d %d", &a, &b);
m[a] = b;
m[b] = a;
}