PAT(Basic Level) Practice : 1065 单身狗 (25分)

1065 单身狗 (25分)

测试点1的坑

建立哈希表的时候,我们要注意他的编号是从0开始的
所以哈希表初始值是0的话会有错误
例如

3
11111 00000
33333 44444
55555 66666
2 11111 0
输出:
2 11111 00001(出现错误)

11111的伴侣编号是0,会被认为是单身
将初始值赋值为-1即可

代码

#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;

#include<iomanip>
//精度

#include<cmath>
//round四舍五入取整

int Hash[100000]={-1};//couple
int Hash1[100000]={0};//present or not
int main()
{

    //哈希表
    int num;
    cin>>num;
    for(int i=0;i<num;i++)
    {
        int n1,n2;
        scanf("%d %d",&n1,&n2);
        Hash[n1]=n2;
        Hash[n2]=n1;
    }


    int M;
    cin>>M;

    vector<int> guest;//no single
    vector<int> res;
    for(int i=0;i<M;i++)
    {
        int n1;
        scanf("%d",&n1);
        if(Hash[n1]==-1)
            res.push_back(n1);
        else
        {
            guest.push_back(n1);
            Hash1[n1]++;
        }

    }
    for(int i=0;i<guest.size();i++)
    {
        if(Hash1[Hash[guest[i]]]==0)
            res.push_back(guest[i]);
    }
    cout<<res.size()<<endl;
    sort(res.begin(),res.end());
    for(int i=0;i<res.size();i++)
    {
        printf("%05d",res[i]);
        if(i!=res.size()-1)
            printf(" ");
        else
            printf("\n");
    }
    return 0;
}

posted @ 2020-09-29 15:27  韩天尊  阅读(104)  评论(0)    收藏  举报