PAT a1121

目的:找出单身狗

输入:

N 情侣对

M 来的人数

输出:

找出单生狗,输入总数

并且按照从小到大输出id

#include<stdio.h>
#include<unordered_map>
#include<map>
#include<vector>

using namespace std;

unordered_map<int,int> g;
map<int,bool> ans;
vector<int> single;

int N,M;

int main()
{
    scanf("%d",&N);

    for(int i=0;i<N;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        g[u] = v;
        g[v] = u;
    }

    scanf("%d",&M);

    for(int i=0;i<M;i++)
    {
        int u;
        scanf("%d",&u);
        ans[u] = true;
    }

    for(map<int,bool>::iterator it = ans.begin();it!=ans.end();it++)
    {
        int u,v;
        u = it->first;
        v = g[u];
        if(ans.find(v)==ans.end())
        {
            single.push_back(u);
        }
    }
    printf("%d\n",single.size());
    for(int i=0;i<single.size();i++)
    {
        printf("%05d",single[i]);
        if(i!=single.size()-1)
        {
            printf(" ");
        }
    }
    return 0;
}

反思:我这样每次判断一个人,就要用map查找一次,时间用得多。可以用数组hash存,用空间换时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值