“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。
输入格式:
输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数;
随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;
之后给出一个正整数 M(≤ 10 000),为参加派对的总人数;
随后一行给出这 M 位客人的 ID,以空格分隔。题目保证无人重婚或脚踩两条船。
输出格式:
首先第一行输出落单客人的总人数;随后第二行按 ID 递增顺序列出落单的客人。
ID 间用 1 个空格分隔,行的首尾不得有多余空格。
输入样例:
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
输出样例:
5
10000 23333 44444 55555 88888
分析:
建立一个下标为id的数组arr,初始化为全0
输入每队夫妇x,y时将将数组置为:arr[x]=y+1;arr[y]=x+1;
接下来输入id时对数组进行判断
如果为0,置为-1
如果不为0,则判断该夫妇是否都到场
最后遍历arr,输出置为-1的下标即可
1 //c
2
3 #include <stdio.h>
4 #define MAX 100000
5
6 int main(){
7 int arr[100000]={0};
8 int n,x,y;
9 scanf("%d",&n);
10 while(n--){
11 scanf("%d%d",&x,&y);
12 arr[x]=y+1;//防止与id:0冲突
13 arr[y]=x+1;
14 }
15 scanf("%d",&n);
16 int res=0;
17 while(n--){
18 scanf("%d",&x);
19 if(arr[x]==0){
20 arr[x]=-1;
21 res++;
22 }
23 else{
24 if(arr[arr[x]-1]==(x+1)){//出现一队夫妇的第一人
25 arr[x]=-1;
26 res++;
27 }
28 else{//出现第二人
29 arr[arr[x]-1]=-2;
30 arr[x]=-2;
31 res--;
32 }
33 }
34 }
35 int f=0;
36 printf("%d
",res);
37 for(int i=0;i<MAX;i++){
38 if(arr[i]==-1){
39 if(f)
40 printf(" ");
41 printf("%05d",i);
42 f=1;
43 }
44 }
45 }