• 5-单身狗(时间和空间的相互选择)


                1065. 单身狗(25)

    时间限制
    300 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

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

    输入格式:

    输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的对数;随后N行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(<=10000),为参加派对的总人数;随后一行给出这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


    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int a[100000], b[100005], c[100005], is[100005];

    int main(){
    int n = 0, x, y;
    cin >> n;
    memset(a, -1, sizeof(a));
    memset(b, -1, sizeof(b));
    for(int i = 0; i < n; i++){
    cin >> x >> y;
    a[x] = y; a[y] = x;
    }
    int m, count = 0;
    cin >> m;
    for(int i = 0; i < m; i++){
    cin >> b[i];
    if(a[b[i]] != -1){ //1.用空间换时间
    is[a[b[i]]] = 1; //表示b[i]的对象a[b[i]]有对象在场
    }
    }
    for(int i = 0; i < m; i++){
    if(is[b[i]] != 1){ //无对象或对象不在场
    c[count++] = b[i];
    }
    }


    /*for(int i = 0; i < m; i++){ //2.时间换空间
    if(b[i] == -1){
    c[count++] = b[i];
    }
    else{
    int y = a[b[i]], j;
    for(j = 0; j < m; j++){
    if(b[j] == y)
    break;
    }
    if(j >= m)
    c[count++] = b[i];
    }
    }*/


    sort(c, count + c);
    cout << count << endl;
    for(int i = 0; i < count; i++){
    if(i == 0)
    printf("%.5d", c[i]);
    else
    printf(" %.5d", c[i]);
    }
    return 0;
    }

  • 相关阅读:
    Redis学习笔记
    Springboot + Tomcat跑项目出现端口被占用的问题
    按层打印二叉树
    打印二叉树的镜像——剑指offer
    判断树的子结构——剑指offer
    实习半个月的感想
    使用KMP算法判断是否为旋转词
    微信双开
    win10 右键添加cmd当前目录打开
    勒索邮件
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7441422.html
Copyright © 2020-2023  润新知