单身狗


题目描述

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

输入格式

输入第一行给出一个正整数 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. 利用vector初始化数组,使数组下标11111的值为22222,数组下标为22222的值为11111,记录有多个有效数组个数cnt
  2. 再利用sort()函数,对数组值进行从大到小排序
  3. 从cnt-1到0,遍历输出单身狗,实现从小到大输出
  4. 利用%05d输出对应格式

参考代码

#include <bits/stdc++.h>
using namespace std;
vector<int> m(100001);
vector<int> mm(100001);
vector<int> p(100001);
bool cmp (int a , int b)
{
    return a > b;
}
int main() {
    int  num , number;
    cin >> num ;
    for(int i = 0 ; i < num ; ++i)
    {
        int temp = 0 ;
        cin >> temp ;
        cin >> m[temp] ;
        m[m[temp]] = temp ;
    }
    cin >> number ;
    for(int i = 0 ; i < number ; ++i)
    {
        cin >> mm[i] ;
    }
    int cnt = 0 ;
    for(int i = 0 ; i < number ; ++i)
    {
        int value = m[mm[i]] ;
        bool flag = true;
        for(int j = 0 ; j < number ; j++)
        {
            if(value == mm[j])
            {
                flag = false;
                break;
            }
        }
        if(flag)
        {
            p[cnt++] = mm[i];
        }
    }
    sort(p.begin(),p.end(),cmp);
    if(cnt == 0)
    {
        cout << cnt;
        return  0 ;
    }
    cout << cnt << endl;
    for(int i = cnt - 1  ; i >= 0; --i)
    {
        if(i < cnt - 1)
        {
            printf(" ");
        }
        printf("%05d",p[i]);
    }
    return 0;
}

文章作者: 瑾年
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 瑾年 !
 上一篇
试密码 试密码
题目描述当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。
2021-07-17
下一篇 
C++ STL C++ STL
Why C++ 很多好用函数如reverse()、sort()函数等 C++标准STL、string类等功能大大降低C语言编写代码的代价
  目录