码迷,mamicode.com
首页 > 其他好文 > 详细

PAT Basic 1065

时间:2018-08-13 00:42:10      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:题解   ems   printf   using   can   max   space   大型   define   

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

  题解:这道题其实用map非常方便,我当时硬生生把写出来了。

代码如下:
 1 #include<iostream>
 2 #include<cstring>
 3 #define N 100000
 4 
 5 using namespace std;
 6 int ac[N] = {0}, result[N] = {0}, result2[N];
 7 
 8 int main()
 9 {
10     int n, a, b, m, num = 0, max = 0, min = N+1;
11     int max2 = 0, min2 = N+1, ok = 0;
12     memset(ac,-1, N);
13     memset(result,-1, N);
14     memset(result,-1, N);
15     scanf("%d",&n);
16     while(n--){
17         scanf("%d %d",&a,&b);
18         ac[a] = b;
19         ac[b] = a;
20         if( a > max2 ) max2 = a;
21         if( b > max2 ) max2 = b;
22         if( a < min2 ) min2 = a;
23         if( b < min2 ) min2 = b; 
24     }
25     scanf("%d",&m);
26     while( m--){
27         scanf("%d",&a);
28         result[a] = 1; 
29         if(a > max) max = a;
30         if( a < min ) min = a;
31     }
32     for( int i = min; i <= max; i++){
33         if( result[i] != 1) continue;
34         else if( ac[i] == -1 ){
35             result2[num] = i;
36             num++;
37         }
38         else if( result[ac[i]] != 1 ){
39             result2[num] = i;
40             num++;
41         }
42     }
43     printf("%d\n",num);
44     for( int i = 0; i < num; i++){
45         if(!ok)
46             ok = 1;
47         else
48             printf(" ");
49         if(result2[i] < 10)
50             printf("0000");
51         else if( result2[i] < 100)
52             printf("000");
53         else if( result2[i] < 1000)
54             printf("00");
55         else if( result2[i] < 10000)
56             printf("0");
57         printf("%d",result2[i]);
58     }
59     return 0;
60 }

 

 

PAT Basic 1065

标签:题解   ems   printf   using   can   max   space   大型   define   

原文地址:https://www.cnblogs.com/yxp400/p/9465530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!