补题链接:Here

2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下:

冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请你实现这个 App 的功能。

输入格式:

输入首先在第一行给出一个正整数 N( \(1<N≤10^5\)),为当地人口数。随后 N 行,每行给出一个人名,格式为:名 姓(带性别后缀),两个字符串均由不超过 20 个小写的英文字母组成。维京人后裔是可以通过姓的后缀判断其性别的,其他人则是在姓的后面加 m 表示男性、f 表示女性。题目保证给出的每个维京家族的起源人都是男性。

随后一行给出正整数 M,为查询数量。随后 M 行,每行给出一对人名,格式为:名1 姓1 名2 姓2。注意:这里的是不带后缀的。四个字符串均由不超过 20 个小写的英文字母组成。

题目保证不存在两个人是同名的。

输出格式:

对每一个查询,根据结果在一行内显示以下信息:

  • 若两人为异性,且五代以内无公共祖先,则输出 Yes
  • 若两人为异性,但五代以内(不包括第五代)有公共祖先,则输出 No
  • 若两人为同性,则输出 Whatever
  • 若有一人不在名单内,则输出 NA

所谓“五代以内无公共祖先”是指两人的公共祖先(如果存在的话)必须比任何一方的曾祖父辈分高。

输入样例:

  1. 15
  2. chris smithm
  3. adam smithm
  4. bob adamsson
  5. jack chrissson
  6. bill chrissson
  7. mike jacksson
  8. steve billsson
  9. tim mikesson
  10. april mikesdottir
  11. eric stevesson
  12. tracy timsdottir
  13. james ericsson
  14. patrick jacksson
  15. robin patricksson
  16. will robinsson
  17. 6
  18. tracy tim james eric
  19. will robin tracy tim
  20. april mike steve bill
  21. bob adam eric steve
  22. tracy tim tracy tim
  23. x man april mikes

输出样例:

  1. Yes
  2. No
  3. No
  4. Whatever
  5. Whatever
  6. NA

首先判断是否存在两人,如果不在输出 NA

其次判断两人性别,一样的输出 Whatever

然后利用 check() 函数判断一下是否 \(5\) 代之内即可(就是判断父亲)

  1. // Murabito-B 21/04/23
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. using ll = long long;
  5. struct Peoson {
  6. char sex;
  7. string fa;
  8. };
  9. map<string, Peoson> people;
  10. bool check(string a, string b) {
  11. int i = 1, j;
  12. for (string A = a; A.size(); A = people[A].fa, ++i) {
  13. j = 1;
  14. for (string B = b; B.size(); ++j, B = people[B].fa) {
  15. if (i >= 5 && j >= 5) return true;
  16. if (A == B) return false;
  17. }
  18. }
  19. return true;
  20. }
  21. void solve() {
  22. int n, m;
  23. string str, a, b;
  24. cin >> n;
  25. for (int i = 1; i <= n; ++i) {
  26. cin >> a >> b;
  27. if (b[b.size() - 1] == 'n')
  28. people[a] = {'m', b.substr(0, b.size() - 4)};
  29. else if (b[b.size() - 1] == 'r')
  30. people[a] = {'f', b.substr(0, b.size() - 7)};
  31. else
  32. people[a].sex = b[b.size() - 1];
  33. }
  34. cin >> m;
  35. while (m--) {
  36. cin >> a >> str >> b >> str;
  37. if (people.find(a) == people.end() || people.find(b) == people.end()) cout << "NA\n";
  38. else if (people[a].sex == people[b].sex)
  39. cout << "Whatever\n";
  40. else
  41. cout << (check(a, b) ? "Yes\n" : "No\n");
  42. }
  43. }
  44. int main() {
  45. ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  46. solve();
  47. return 0;
  48. }

L2-030 冰岛人 (25 分) (阅读理解)的更多相关文章

  1. A1012 The Best Rank (25)(25 分)

    A1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...

  2. PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)

    1075 PAT Judge (25分)   The ranklist of PAT is generated from the status list, which shows the scores ...

  3. PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642 题目描述: "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大 ...

  4. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  5. L2-007 家庭房产 (25 分)

    L2-007 家庭房产 (25 分)   给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...

  6. 用Keras搞一个阅读理解机器人

    catalogue . 训练集 . 数据预处理 . 神经网络模型设计(对话集 <-> 问题集) . 神经网络模型设计(问题集 <-> 回答集) . RNN神经网络 . 训练 . ...

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

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

  8. 1121 Damn Single (25 分)

    1121 Damn Single (25 分) "Damn Single (单身狗)" is the Chinese nickname for someone who is bei ...

  9. 1114 Family Property (25 分)

    1114 Family Property (25 分) This time, you are supposed to help us collect the data for family-owned ...

  10. 【PAT】1015 德才论 (25)(25 分)

    1015 德才论 (25)(25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得 ...

随机推荐

  1. 通过Span实现高性能数组,实例解析

    Span<T> 是 C# 7.2 引入的一个强大的数据结构,用于表示内存中的一块连续数据.它可以用于实现高性能的数组操作,而无需额外的内存分配.在本文中,我将详细介绍如何使用 Span&l ...

  2. typora写作

    平时写博客,一般采用typora,但是字体颜色和上传到博客园的图片大小和居中问题,总是很糟糕,偶然发现输入法里面还有自定义的短语,能够解决这个问题. <p><img src=&quo ...

  3. 使用 Guava Retry 优雅的实现重试机制

    王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 大家好,我是王有志.今天我会通过一个真实的项目改造案例和大家聊一聊如何优雅的实现 Java 中常用的的重 ...

  4. Pipeline模式应用

    本文记录Pipeline设计模式在业务流程编排中的应用 前言 Pipeline模式意为管道模式,又称为流水线模式.旨在通过预先设定好的一系列阶段来处理输入的数据,每个阶段的输出即是下一阶段的输入. 本 ...

  5. Unicode编码解码

    一.Unicode概述 Unicode是一种字符编码标准,旨在解决不同字符集之间的兼容性问题.它为全球所有语言提供了一种统一的编码方式,使得各种字符能够在计算机系统中正确显示和处理.Unicode字符 ...

  6. unsafe类和varhandle类讲解

    Java的Unsafe类是一个非常特殊的类,它提供了一组原始.底层的操作,可以跳过Java的限制,直接操作内存和对象.这些操作可能会破坏Java的安全机制,所以Unsafe类被标记为不安全的. Uns ...

  7. 基于DotNetty实现自动发布 - 实现一键打包发布

    前言 上一篇,我只实现了一键检测代码变化,本篇才是真正的实现了一键打包发布 效果图 客户端打包待发布文件 /// <summary> /// 把多个文件添加到压缩包 (保留文件夹层级关系) ...

  8. Java如何连接Mysql数据库

    条件:eclipse.MySQL .jdbc驱动 eclipse.MySQL 的安装.下载jdbc连接驱动 eclipse的安装去官网下载并安装 MySQL .jdbc的下载地址请访问:https:/ ...

  9. Chrome扩展的核心:manifest 文件(下)

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 在上篇和中篇中已经完成了对 manifest 文件中以下字段的解释: "manifest_ ...

  10. JWT简单使用

    创建一个Maven项目,并导入jar包 <?xml version="1.0" encoding="UTF-8"?> <project xml ...