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

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

输入格式:

输入首先在第一行给出一个正整数 N(1<N≤105),为当地人口数。随后 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

代码如下: 

#include <bits/stdc++.h>
using namespace std;
const long N = 1e5+10;
int p[N];
int cnt[N];
int dy[N];
int dx[N];
string name[N], xing[N];
map<string, int> q;
bool xunzhao(int x, int y)
{memset(cnt,0,sizeof(cnt));memset(dx,0,sizeof(dx));memset(dy,0,sizeof(dy)); cnt[x] = 1, cnt[y] = 1;while (p[x] != -1){cnt[p[x]]++;dx[p[x]] = dx[x] + 1;if (p[x] == y)return false;x = p[x];}while (p[y] != -1){cnt[p[y]]++;dy[p[y]] = dy[y] + 1;if (cnt[p[y]]>1){if(dy[p[y]]>=4&&dx[p[y]]>=4)return true;else return false;}y = p[y];}return true;
}
int main()
{int n;cin >> n;getchar();int sex[N];for (int i = 1; i <=n; i++){string s="";cin >> name[i] >> xing[i];q[name[i]] = i;int len = xing[i].size() - 1;if (xing[i][len] == 'n' || xing[i][len] == 'm'){sex[i] = 1;}elsesex[i] = -1;if (xing[i][len] == 'n'){for (int j = 0; j < len - 3; j++)s += xing[i][j];}else if (xing[i][len] == 'r'){for (int j = 0; j < len - 6; j++)s += xing[i][j];}xing[i] = s;}memset(p,-1,sizeof(p));for (int i = 1; i <=n; i++){if (q[xing[i]] > 0){p[i] = q[xing[i]];}}int w;cin >> w;while (w--){string c1, c2, c3, c4;cin >> c1 >> c2 >> c3 >> c4;int x=q[c1];int y=q[c3];if (!sex[q[c1]] || !sex[q[c3]])cout << "NA";else if (sex[x] == sex[y])cout << "Whatever";else{if (xunzhao(x,y))cout << "Yes";elsecout << "No";}cout<<endl; }return 0;
}

7-28 冰岛人 (25 分)相关推荐

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

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

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

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

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

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

  4. 冰岛人 (25 分)

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

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

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

  6. PTA L2-2 冰岛人 (25分)

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

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

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

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

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

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

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

  10. L2-030 冰岛人 (25 分)-PAT 团体程序设计天梯赛 GPLT

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

最新文章

  1. 川崎机器人示教盒维修_专业维修丹阳市KUKA库卡KRC2库卡C4主板维修{苏州罗韦维修}...
  2. cocos2d-js 3.0 RC0 监听返回键、菜单键、进入后台(home键)、恢复显示等事件
  3. bzoj1834: [ZJOI2010]network 网络扩容
  4. python类型转换-Python基本数据类型转换
  5. 导入代码时eclipse的src目录变为包名
  6. P3805 【模版】manacher算法(manacher)
  7. 经典C语言程序100例之九一
  8. UnityShader之Shader格式篇【Shader资料1】
  9. Maven pom.xml 元素配置说明(一)
  10. aps后缀是什么文件_APS审核真的取消了么?
  11. USACO3.22Stringsobits
  12. Django ORM中原生JSONField的使用方法
  13. 规划极限编程阅读笔记01
  14. 十分钟弄懂最快的APP自动化工具uiautomator2
  15. 催眠与大脑的信息处理
  16. 极市直播丨南京理工大学魏秀参、沈阳:大规模细粒度图像检索
  17. 软件工程---客观题
  18. Rem布局案例讲解。
  19. 在FL Studio中如何制作白噪音的转场效果
  20. 大物实验计算弹性模量_大学物理实验报告(清华大学)拉伸法测弹性模量.doc...

热门文章

  1. pylandstats 计算景观指数,python
  2. 学习matplotlib.pyplot笔记,常用contourf
  3. 职称论文发表一般用什么系统检测
  4. Linux----bond技术及mode模式详解
  5. 关于git的常用操作
  6. 使用Prometheus进行服务器监控
  7. .net core 浅克隆和深克隆/浅拷贝和深拷贝
  8. 浅谈onlyoffice文档协作在工程设计中的应用——共享excel计算书
  9. MATLAB如何画数据分布曲线,Matlab绘制累积分布函数(CDF)
  10. 前端前端开发工程师_如何消除您对成为前端工程师的担忧