PAT乙级1065

“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。

输入格式:

输入第一行给出一个正整数 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
 1 #include<bits/stdc++.h>
 2 #define maxn 100005
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int ans=0;
 8     map<int,int>mp;
 9     set<int> s;
10     set<int>::iterator it;
11     int n;
12     cin>>n;
13     for(int i=1;i<=n;i++)
14     {
15         int a,b;
16         cin>>a>>b;
17         mp.insert(make_pair(a,b));
18         mp.insert(make_pair(b,a));
19     }
20     cin>>n;
21     int b[n];
22     for(int i=0;i<n;i++)
23     {
24      cin>>b[i];
25     }
26     int t;
27     for(int i=0;i<n;i++){
28             int flag=1;
29             if(mp.find(b[i])!=mp.end())
30         {
31             t=mp[b[i]];
32              flag=0;
33         }
34         if(flag)
35             s.insert(b[i]);
36         else{
37        for(int j=0;j<n;j++)
38         if(b[j]==t)
39         {ans++;
40         flag=1;
41         break;
42         }
43         if(!flag)
44         s.insert(b[i]);
45         }
46     }
47     cout<<n-ans<<endl;
48     for(it=s.begin();it!=s.end();it++)
49         if(it==s.begin())
50         printf("%05d",*it);
51       else
52         printf(" %05d",*it);
53     return 0;
54 }

思路:

把夫妻/伴侣存入map中,把参加派对的人存入数组中,如果参加派对的人不在map中,将值插入set;如果参加派对的人在map中但是与她对应的人不在数组里,将值插入set。

遍历set并输出。

posted @ 2019-05-24 15:32  zuiaimiusi  阅读(224)  评论(0编辑  收藏  举报