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 }
原文地址:https://www.cnblogs.com/yxp400/p/9465530.html
时间: 2024-11-04 23:45:21