PAT 1065 单身狗 分数:25分 知识点:哈希

719 阅读1分钟

题目:1065 单身狗 - PAT (Basic Level) Practice (中文) (pintia.cn)

解析:65_哔哩哔哩_bilibili

思想

把夫妻装入到 夫妻表(map)里面,然后把参加宴会的人装到哈希表里面

如果说哈希表中的值是0,说明某个人的对象(也就是他自己)没有来到了派对,也就是所谓的单身狗。

#include<bits/stdc++.h>
using namespace std;
map<int,int>mp;
map<int,int>haxi;
int a[10005];
vector<int>ans;

int main()
{  
    int n;cin>>n;
    for(int i=0;i<n;i++)
    {
        int a,b;cin>>a>>b;
        mp[a]=b;
        mp[b]=a;
    }
    int m;cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>a[i],haxi[a[i]]=1;
    }
    for(int i=0;i<m;i++)
    {
        //a[i]在夫妻队列中找另一个,找不到就是0,说明是单身狗
       if (!haxi[mp[a[i]]])ans.push_back(a[i]);
    }
    sort(ans.begin(),ans.end());
    cout<<ans.size()<<endl;
    for (int i = 0; i < ans.size(); i++)
    {
        if (i)cout << " ";  //如果i不为收首就打印空格
        printf("%05d",ans[i]);
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
vector<int>ans;
map<int,int>mp;
int haxi[100005];
int arr[10005];
int main()
{
   int n;cin>>n;
    for(int i=0;i<n;i++)
    {
        int a,b;cin>>a>>b;
        mp[a]=b;
        mp[b]=a;
    } 
    int m;cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>arr[i];haxi[arr[i]]=1;
    }

    for(int i=0;i<m;i++)
    {
        if(!haxi[mp[arr[i]]])ans.push_back(arr[i]);
    }
     sort(ans.begin(), ans.end());
    cout<<ans.size()<<endl;
    for (int i = 0; i < ans.size(); i++)
    {
        if (i)cout << " ";  //如果i不为收首就打印空格
        printf("%05d", ans[i]);
    }
    return 0;
}

image.png