PAT(Advanced Level)A1121. Damn Single

题意

给出很多情侣,开聚会,看聚会上的哪些人是“单身狗”

思路

  • 开2个unordered_map<int, int>来记住情侣关系,记住谁有伴侣谁没有
  • 开一个flag数组,标记出现在聚会上的人
  • “单身狗”要么是本来就没有伴侣的,要么是伴侣没有一起来聚会的

代码

#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <string.h>
using namespace std;
int flag[100010] = {0};
int main() {
    int couples, u, v;
    scanf("%d", &couples);
    unordered_map<int, int> mp;             // 记住情侣关系
    unordered_map<int, int> has_couple;     // 记录谁有伴侣谁没有
    for(int i = 0; i < couples; i++) {
        scanf("%d %d", &u, &v);
        mp[u] = v;
        mp[v] = u;
        has_couple[u] = has_couple[v] = 1;
    }
    
    int num;
    scanf("%d", &num);
    vector<int> dogs;
    vector<int> party;
    party.resize(num);
    for(int i = 0; i < num; i++) {
        scanf("%d", &party[i]);
        flag[party[i]] = 1;
    }
    for(auto i: party) {
        // 没有伴侣 || 伴侣没来 就被我们视为单身狗
        if(has_couple[i] == 0 || flag[mp[i]] == 0)
            dogs.emplace_back(i);
    }
    sort(dogs.begin(), dogs.end());
    cout << dogs.size() << endl;
    // 注意如果没有单身狗就不用输出名单了
    if(dogs.size() != 0) {
        printf("%05d", dogs.front());
        for(int i = 1; i < dogs.size(); i++)
            printf(" %05d", dogs[i]);
    }
    return 0;
}
posted @ 2021-03-13 20:19  MartinLwx  阅读(12)  评论(0编辑  收藏  举报