• PAT1121:Damn Single


    1121. Damn Single (25)

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

    "Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are supposed to find those who are alone in a big party, so they can be taken care of.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N (<=50000), the total number of couples. Then N lines of the couples follow, each gives a couple of ID's which are 5-digit numbers (i.e. from 00000 to 99999). After the list of couples, there is a positive integer M (<=10000) followed by M ID's of the party guests. The numbers are separated by spaces. It is guaranteed that nobody is having bigamous marriage (重婚) or dangling with more than one companion.

    Output Specification:

    First print in a line the total number of lonely guests. Then in the next line, print their ID's in increasing order. The numbers must be separated by exactly 1 space, and there must be no extra space at the end of the line.

    Sample Input:
    3
    11111 22222
    33333 44444
    55555 66666
    7
    55555 44444 10000 88888 22222 11111 23333
    
    Sample Output:
    5
    10000 23333 44444 55555 88888
    

     思路

      给你n对情侣的代号以及一场派对的代号名单,找出名单中的单身狗(情侣中只要有一个没在也算),代号升序输出。

      1.用一个isExist数组标记伴侣的存在,比如isExist[i] == 1 表示代号为i的人的伴侣也在派对上。

      2.用couple数组关联两个人,guest数组记录在排队上的人。

      3.遍历guest进行相关处理即可。

      注意:1)用map关联一对情侣会超时,改用数组直接关联。

                 2)set的迭代器如果先被声明在循环外部(处理第一个数据的空格字符),然后再进入迭代循环会超时,所以得直接在迭代内部声明迭代器。

                (这个问题不是很清楚出在哪,猜测可能跟迭代器的构造有关)

     代码

    #include <cstdio>
    #include <set>
    #include <vector>
    using namespace std;
    int main() {
        int n, a, b, m;
        scanf("%d", &n);
        vector<int> couple(100000);
        for (int i = 0; i < 100000; i++)
            couple[i] = -1;
        for (int i = 0; i < n; i++) {
            scanf("%d%d", &a, &b);
            couple[a] = b;
            couple[b] = a;
        }
        scanf("%d", &m);
        vector<int> guest(m), isExist(100000);
        for (int i = 0; i < m; i++) {
            scanf("%d", &guest[i]);
            if (couple[guest[i]] != -1) {
                isExist[couple[guest[i]]] = 1;
            }
        }
        set<int> s;
        for (int i = 0; i < m; i++) {
            if (!isExist[guest[i]]) {
                s.insert(guest[i]);
            }
        }
        printf("%d
    ", s.size());
        for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
            if (it != s.begin())
                printf(" ");
            printf("%05d", *it);
        }
        return 0;
    }
    

      

  • 相关阅读:
    伪类和伪元素的区别, 总结的很好, 直接看结论.
    进制闲谈
    遇到的问题&思考
    PHP中include引用导致不能再次相对引用文件的一个小问题
    ECharts饼图试玩
    不该迷茫的时候迷茫
    [5]火车票接口整理
    [4]xlongwei工具类
    [3]天行新闻
    [2]新闻
  • 原文地址:https://www.cnblogs.com/0kk470/p/7910677.html
Copyright © 2020-2023  润新知