PAT-乙級-1065 單身狗
阿新 • • 發佈:2018-12-08
“單身狗”是中文對於單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。
輸入格式:
輸入第一行給出一個正整數 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\n",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 }