PAT Basic 1065

Posted yxp400

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT Basic 1065相关的知识,希望对你有一定的参考价值。

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
",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的主要内容,如果未能解决你的问题,请参考以下文章

PAT Basic 1049

PAT Basic 1078

PAT 1065 A+B and C (64bit) (20)

PAT乙级 1065. 单身狗(25) by Python

PAT1065: A+B and C (64bit)

PAT乙级1065