PAT乙級1065. 單身狗(C語言)
阿新 • • 發佈:2019-01-11
/*
* 1. 單身狗的判斷:
* 1.1 沒有物件;
* 1.2 有物件,兩人中只有一人蔘加派對;
* 2. 以ID為陣列下標記錄情感狀況;
* 3. 有物件的人,參加派對的人做特殊標記;
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, M, cp[100000];//伴侶的對數,派對總人數,記錄情感狀況
scanf("%d", &N);
for (int i = 0; i < 100000; i++) {//初始化情感狀況
cp[i] = -1 ;
}
int a, b;
for (int i = 0; i < N; i++) {//讀取N行情侶的id
scanf("%d %d", &a, &b);
cp[a] = b;//記錄id對應的情侶id
cp[b] = a;
}
scanf("%d", &M);
int all[M], cnt_dog = 0;//所有人員的id,單身狗的數量
for (int i = 0; i < M; i++) {//讀取所有參加派對的人的id
scanf("%d" , &all[i]);
if (cp[all[i]] == -1) {//如果沒有物件
cnt_dog++;
cp[all[i]] = -3;//更新單身狗的標記
} else {//如果有物件,將值設為-2,表示自己參加
cp[all[i]] = -2;
}
}
for (int i = 0; i < 100000; i++) {//篩選有物件的人之中的單身狗
if (cp[i] > -1 && cp[cp[i]] == -2 ) {//自己沒參加,物件參加
cnt_dog++;
cp[cp[i]] = -3;//改為單身狗狀態
}
}
printf("%d\n", cnt_dog);
for (int i = 0; i < 100000 && cnt_dog > 0; i++) {
if (cp[i] == -3) {//輸出單身
printf("%05d", i);
if (cnt_dog != 1) {
printf(" ");
}
cnt_dog--;
}
}
return 0;
}