"Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are supposed to find those who are alone in a big party, so they can be taken care of.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤ 50,000), the total number of couples. Then N lines of the couples follow, each gives a couple of ID's which are 5-digit numbers (i.e. from 00000 to 99999). After the list of couples, there is a positive integer M (≤ 10,000) followed by M ID's of the party guests. The numbers are separated by spaces. It is guaranteed that nobody is having bigamous marriage (重婚) or dangling with more than one companion.

Output Specification:

First print in a line the total number of lonely guests. Then in the next line, print their ID's in increasing order. The numbers must be separated by exactly 1 space, and there must be no extra space at the end of the line.

Sample Input:

3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333

Sample Output:

5
10000 23333 44444 55555 88888
 
 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <queue>
 4 #include <vector>
 5 #include <set>
 6 #include <map>
 7 using namespace std;
 8 const int maxn=100031;
 9 int couple[maxn]={0};
10 vector<int> v;
11 int peop[maxn]={0};
12 int n;
13 int main(){
14     scanf("%d",&n);
15     for(int i=0;i<n;i++){
16         int cp,cp2;
17         scanf("%d %d",&cp,&cp2);
18         couple[cp]=cp2;
19         couple[cp2]=cp;
20     }
21     scanf("%d",&n);
22     for(int i=0;i<n;i++){
23         int p;
24         scanf("%d",&p);    
25         peop[p]=1;
26         v.push_back(p);
27     }
28     for(int i=0;i<n;i++){
29         if(peop[v[i]]==1){
30             if(peop[couple[v[i]]]==1 && couple[couple[v[i]]]==v[i]){
31                 peop[v[i]]=0;
32                 peop[couple[v[i]]]=0;
33             }
34         }
35     }
36     int cnt=0;
37     for(int i=0;i<n;i++){
38         if(peop[v[i]]==1){
39             cnt++;
40         }
41     }
42     printf("%d\n",cnt);
43     int num=0;
44     sort(v.begin(),v.end());
45     for(int i=0;i<n;i++){
46         if(peop[v[i]]==1){
47             printf("%05d",v[i]);
48             num++;
49             if(num!=cnt)printf(" ");
50         }
51     }
52 }
View Code

注意点:一开始想用set和map,发现map其实就是一个大数组,还不如直接开个大数组。一开始题目理解错了,以为只要找给的人里是单身狗的就行,结果是有对象的对象没来也算单身,行吧