思路:检查某个客人是否有伴侣,如果有,伴侣是否也出现即可。

注意:0个单身狗的时候,不要输出多余的’\n’, 否则会出现格式错误。


AC代码

#include <stdio.h>
#include <string.h>
#include <map>
#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
const int maxn = 1e5+5;
map<string, int> ID;
vector<string>gue;
vector<int>ans;
int p[maxn]; //伴侣编号
bool vis[maxn];
int id;

int getId(string a) {
    if(!ID.count(a)) {
        ID[a] = id++;
    }
    return ID[a];
}

void init() {
    ID.clear();
    id = 0;
    memset(vis, 0, sizeof(vis));
    memset(p, -1, sizeof(p));
}

bool cmp(int a, int b) {
    return gue[a] < gue[b];
}

int main() {
    init();
    char a[10], b[10];
    int n, m;
    scanf("%d", &n);

    for(int i = 0; i < n; i++) {
        scanf("%s%s", a, b);
        int u = getId(a);
        int v = getId(b);
        p[u] = v;
        p[v] = u;
    }
    scanf("%d", &m);
    for(int i = 0; i < m; i++) {
        scanf("%s", a);
        gue.push_back(a);
        if(ID.count(a)) {
            int u = getId(a);
            vis[u] = 1;
        }
    }
    for(int i = 0; i < m; i++) {
        if(!ID.count(gue[i])) {
            ans.push_back(i);
            continue;
        }
        int u = getId(gue[i]);
        int par = p[u];
        if(!vis[par]) ans.push_back(i);
    }
    sort(ans.begin(), ans.end(), cmp);
    printf("%d\n", ans.size());
    for(int i = 0; i < ans.size(); i++) {
        if(i == 0) {
            cout << gue[ans[i]];
        } else {
            cout << " " << gue[ans[i]];
        }
    }
    if(ans.size() > 0) printf("\n");
    return 0;
}

如有不当之处欢迎指出!

PAT乙级1065 map的更多相关文章

  1. PAT乙级 1065. 单身狗(25) by Python

    1065. 单身狗(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue "单身狗"是中文对 ...

  2. PAT 乙级 1065 单身狗 (25 分)

    1065 单身狗 (25 分) “单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是 ...

  3. PAT乙级完结有感

    去年10月开始刷的题,拖拖拉拉的终于借这个假期刷完了,总的来说还是有点小激动的,毕竟,第一次刷完一个体系,在这之前,我在杭电.南阳.洛谷.leetcode.以及我们自己学校的OJ上刷过,但都没有完完整 ...

  4. PAT乙级:1069 微博转发抽奖 (20分)

    PAT乙级:1069 微博转发抽奖 (20分) 题干 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入 ...

  5. PAT乙级:1014 福尔摩斯的约会 (20分)

    PAT乙级:1014 福尔摩斯的约会 (20分) 题干 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk ...

  6. PAT乙级:1083 是否存在相等的差 (20分)

    PAT乙级:1083 是否存在相等的差 (20分) 题干 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小), ...

  7. PAT乙级:1076 Wifi密码 (15分)

    PAT乙级:1076 Wifi密码 (15分) 题干 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题 ...

  8. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  9. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

随机推荐

  1. The server's host key is not cached in the registry. You have no guarantee that the server……

    使用putty中的pscp.exe ,可以通过脚本方式实现windows向linux上传文件,但pscp.exe第一次运行时必须手工输入确认信息,本文主要解决掉初次运行时的人工交互,彻底实现静默运行. ...

  2. 微信H5支付网络环境未能通过安全验证,请稍后再试(获取终端ip )

    在写微信H5支付的时候需要获取终端IP使用官方的方法是不对的报错如下: 故重写一个:如下 function get_client_ip(){ if(getenv('HTTP_CLIENT_IP') & ...

  3. WPF笔记(2.4 Grid)

    第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致一些,但是,这么玩很麻烦,先横着竖着定义一大堆,然后把 ...

  4. Activity的setContentView的流程

    最简单的Activity中的内容大致是这样的: public class MainActivity extends Activity { @Override public void onCreate( ...

  5. IO (四)

    1 深度遍历文件夹 示例: package java20; import java.io.File; import java.io.FilenameFilter; import java.text.S ...

  6. WindowXp-Windows7-Windows运行命令(转)

    Win7里面按 Win+R 呼出运行界面,一下是它的一些常用命令: 1.cleanmgr: 打开磁盘清理工具 2.compmgmt.msc: 计算机管理 3.conf: 启动系统配置实用程序 4.ch ...

  7. 赋值号和printf

    1.赋值号会自动转换类型: int a= 2.1; printf(‘‘%d’’,a);         //输出结果是2 2.printf不会转换类型,而是直接将内存中表示的补码数拿出来,最明显的就是 ...

  8. 从jvm源码看synchronzied

    synchronized的使用 synchronized关键字是Java中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个:(1)互斥性:确保线程互斥的访问同步代码(2)可见性:保证共享 ...

  9. JAVA设计模式---迭代器模式

    1.定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 2.实例:1)需求: 菜单(煎饼屋菜单.餐厅菜单和咖啡菜单)采用不同的集合存取(ArrayList,String[] ...

  10. redis基础知识

    特点 内存+磁盘的持久化保存 具有非常丰富的数据类型,尤其擅长数组类数据的高速度处理 数据快照 自带的主从复制 丰富的数据类型 字符串 链表 集合 有序集合 散列表 适用场景 时间线应用 得益于链表的 ...