日期:2023-12-16
一:个人在程序中的理解和bool函数名的作用方式
(1)bool数组vis来判断人是否出现,默认所有人为false,出现的那个置为true。
(2)output数组读取每个参加派对人员,用于输出最后结果的,并开设数组记录每个ID在output中的编号。对于读取的每一个ID,通过pairs数组对该ID对应的另一半ID是否出现进行判断。
(3)情侣第一个出现的不会被判断为情侣,但当另一半出现时,两者会被判定为情侣。
(4)num -= 2,注意不能把参加宴会人数减2了,不然无法把所有参加派对的人读入,把output中对应位置以及情侣的位置进行置换,使其在排序时可以直接排到后面,情侣在output中的位置可由pairs确定,再通过数组c查找该在output中的位置。
(5)输出注意前缀要有0,并且行末无空格的情况下需要把第一个和后面的分开输出,因此产生了一个问题——如果参加派对人数除去掉情侣是0,那么没有结果输出,所以需要加入特殊判断参会人员是不是为0。
二:代码及运行情况
#include <stdio.h>
#include <algorithm>
using namespace std;
#define INF 1e6
int pairs[100005];
bool vis[100005];
int output[10005];
int c[100005];
int main(void)
{
int n, a, b, m;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d %d", &a, &b);
pairs[a] = b;
pairs[b] = a;
}
scanf("%d", &m);
int num = m;
for (int i = 0; i < m; i++)
{
scanf("%d", &a);
output[i] = a;
c[a] = i;
vis[a] = true;
if (vis[pairs[a]])
{
output[i] = INF;
output[c[pairs[a]]] = INF;
num -= 2;
}
}
printf("%d\n", num);
sort(output, output + m);
if (num != 0)
printf("%05d", output[0]);
for (int i = 1; i < num; i++)
{
printf(" %05d", output[i]);
}
return 0;
}