PTA L2-2 冰岛人 (25分)

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

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

输入格式:

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

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

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

输出格式:

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

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

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

输入样例:

15
chris smithm
adam smithm
bob adamsson
jack chrissson
bill chrissson
mike jacksson
steve billsson
tim mikesson
april mikesdottir
eric stevesson
tracy timsdottir
james ericsson
patrick jacksson
robin patricksson
will robinsson
6
tracy tim james eric
will robin tracy tim
april mike steve bill
bob adam eric steve
tracy tim tracy tim
x man april mikes

输出样例:

Yes
No
No
Whatever
Whatever
NA

作者: 陈越

单位: 浙江大学

时间限制: 400 ms

内存限制: 64 MB

代码长度限制: 16 KB


思路:这个题就可以看成是一棵树,可以通过姓指向他的父亲的名,然后他父亲的姓又能指向他父亲的父亲的名……这就可以看作是一个有孩子结点指向父亲节点的树。我们可以通过一个人的名来找出他父亲的所有信息,然后根据父亲信息中的姓又能找出父亲的父亲的所有信息……用map实现,key表示一个人的名,value表示这个人的父亲的信息结构体。

Code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
int N, M;
struct node
{char gender;string father;node(char gender = '\0', string father = "") : gender(gender), father(father) {}
};
map<string, node> p;
bool judge(string x, string y)
{int cx = 1, cy;for (string xf = x; xf != ""; xf = p[xf].father, cx++){cy = 1;for (string yf = y; yf != ""; yf = p[yf].father, cy++){if (cx >= 5 && cy >= 5)return true;else if (xf == yf)return false;}}return true;
}
int main()
{std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> N;string a, b, c, d;while (N--){cin >> a >> b;if (b.back() == 'n')p[a] = node('m', b.substr(0, b.size() - 4));else if (b.back() == 'r')p[a] = node('f', b.substr(0, b.size() - 7));elsep[a].gender = b.back();}cin >> M;while (M--){cin >> a >> b >> c >> d;if (p.find(a) == p.end() || p.find(c) == p.end())printf("NA\n");else if (p[a].gender == p[c].gender)printf("Whatever\n");elseprintf(judge(a, c) ? "Yes\n" : "No\n");}return 0;
}

PTA L2-2 冰岛人 (25分)相关推荐

  1. L2-030 冰岛人 (25分)

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

  2. L2-030 冰岛人 (25 分) unordered_map

    L2-030 冰岛人 题目 代码 题目 L2-030 冰岛人 (25 分) 冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir.因为冰岛 ...

  3. 【CCCC】L2-030 冰岛人 (25分) 模拟题,二叉树链式存储,从底部向上

    problem L2-030 冰岛人 (25分) 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普 ...

  4. 7-11 冰岛人 (25分)

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

  5. 天梯赛 L2-030 冰岛人 (25 分) map

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

  6. 冰岛人 (25 分)

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

  7. 天梯赛 L2-030 冰岛人 (25 分)

    天梯赛 L2-030 冰岛人 (25 分) 思路分析 看见这种题目,建议直接放弃... 仅打卡使用,本人不会做= = 参考代码 #include <iostream> #include & ...

  8. L2-030 冰岛人 (25分)(C语言)

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

  9. PTA 7-29 冰岛人 (25分)

    2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普如下: 冰岛人沿用的是维京人古老的父系姓制,孩子的 ...

最新文章

  1. 软件测试面试总结——常见的面试问题
  2. python连接服务器怎么用_使用Python连接到远程服务器
  3. 原生js实现ajax的文件异步提交功能、图片预览功能.实例
  4. 特斯拉Model 3产能跟不上,是因为用了太多机器人
  5. redis介绍、主从配置
  6. 【CentOS 7笔记43】,防火墙和iptables filter表#
  7. php数组操作,内容相同,键值不同,互换
  8. 计算机领域,客观事物的属性,客观事物
  9. 我在成都火车站捡了个彝族美女 第19节:饭来张口的生活
  10. 基于稀疏表示的分类方法 Sparse Representation based Classification Method
  11. TexturePacker破解办法
  12. Java通过webcam-capture调用摄像头并截图
  13. suse bios版本_如何检查和更新BIOS版本
  14. hdu 6706 huntian oy 杜教筛
  15. Linux学习笔记(二十三) -- QT的安装和卸载
  16. MOS管符号识别MOS管不同功能MOS管与寄生电容
  17. 运行单机游戏时,缺少D3DCompiler_43.dll
  18. 2021 ICPC Southeastern Europe Regional Contest 树上dfs+思维
  19. 解决Axure的元件库中部分原件不可使用的方法
  20. 从《羊了个羊》看随机数的生成原理

热门文章

  1. 1039家校通 万能密码绕过 CNVD-2020-31494
  2. m基于效用函数的联合资源分配matlab仿真,对比PF,CUBP以及DUBP三种方法
  3. pbi 度量值计算列+日期表+层次结构+数据分组+交互式分析+横向纵向可视化选择+轴、图例、值拖拽
  4. 西安交大2020年秋 在线作业及答案
  5. Spring数据库访问
  6. m.2固态硬盘 服务器,M.2接口固态硬盘选购注意事项:PCIe和SATA的区别
  7. 什么是制造运营管理(MOM)-西门子MES/MOM介绍
  8. 题目 1605: 阿尔法乘积
  9. Go语言channel的底层
  10. 在UE4虚幻引擎下使用VRPN接入optitrack(Motive)的实时数据