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;
}