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

思路:通过后缀区分维京人和性别,由于姓的最后一个字母都不同,只看最后一个字母即可。名字通过map来对应下标,两次搜索记录两人的祖先即可。

坑点!!!!!!:

1....这个题说的五代以内是两者的公共祖先必须都在两人的五代以内才行,如果公共祖先是一个人的十八代祖宗,但却在另一个人的五代以内也无法通过(感觉是测试点3和6)

2....输入数据时不要在一个循环里同时处理姓名的输入和关系处理,因为有的数据是父亲在儿子的后面输入,会导致错误,先存下所有人的姓名,再一次循环处理关系!!!

3.....姓最后是“f”的人,可以处理也可以不处理,对题目无关,因为后缀是父亲的名字。

#include<bits/stdc++.h>
using namespace std;
const int N=100000+10;
int n,m,s[N],sex[N],flag,p[N];
map<string,int>v;
void find1(int x){p[x]=1;if(x!=s[x]) find1(s[x]);
}
void find2(int x,int deep){if(deep==5) return;if(p[x]) flag=0;if(x!=s[x]) find2(s[x],deep+1);
}
int main(){string ming,xing[N],a,b,c,d;cin>>n;for(int i=1;i<=n;i++) s[i]=i;for(int i=1;i<=n;i++){cin>>ming>>xing[i];v[ming]=i;}for(int i=1;i<=n;i++){int len=xing[i].size();if(xing[i][len-1]=='m') sex[i]=1;else if(xing[i][len-1]=='f') sex[i]=0;else if(xing[i][len-1]=='n'){string t=xing[i].substr(0,len-4);s[i]=v[t],sex[i]=1;}    else if(xing[i][len-1]=='r'){string t=xing[i].substr(0,len-7);s[i]=v[t],sex[i]=0;}   }cin>>m;for(int i=1;i<=m;i++){cin>>a>>b>>c>>d;if(v[a]==0||v[c]==0) cout<<"NA";else if(sex[v[a]]==sex[v[c]]) cout<<"Whatever";else{flag=1;memset(p,0,sizeof p);find1(v[a]),find2(v[c],1);memset(p,0,sizeof p);find1(v[c]),find2(v[a],1);if(flag) cout<<"Yes";else cout<<"No";}if(i!=m) cout<<endl;}return 0;
} 

L2-030 冰岛人PTA相关推荐

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

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

  2. 【L2-030 冰岛人】天梯赛L2系列详解

    天梯赛L2-030 冰岛人 题目详情: 思路: 先搞清楚题目要求我们干什么? 直接看输出格式部分,四种情况:异性,同性,有无共同祖先,是否在名单内. 1.判断性别:如果是维京人那么通过性别后缀,否则通 ...

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

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

  4. PTA L2-030 冰岛人 (并查集)

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

  5. L2-030 冰岛人

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

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

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

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

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

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

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

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

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

最新文章

  1. 创建Maven的Web工程
  2. 3.C#知识点:is和as
  3. 【数据竞赛】5行代码检测分布不一致,代码少效果好!
  4. leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)
  5. LwIP应用开发笔记之十:LwIP带操作系统基本移植
  6. 常用排序算法-java实现(插入,快排)
  7. Python判断素数
  8. 安全模型和业务安全体系
  9. docker限制cpu、内存使用
  10. 状态机的编写(使用C++)
  11. Java面试题笔试题汇总
  12. 11发布自己的镜像(阿里云)
  13. 女程序员南漂3年:有种心酸叫孤单的人总是晚回家
  14. GitHub Desktop图文教程
  15. 浅谈ipad阅读类应用设计
  16. android 动画 最顶层_【尼康影像学院】使用SnapBridge连接照相机与智能手机(Android安卓系统)...
  17. 8255A红绿灯c语言程序,微机原理十字路口红绿灯闪烁实验
  18. 前端页面中iOS版微信长按识别二维码的bug与解决方案
  19. 定制NFC卡片/ntag213芯片卡/手机NFC感应卡片
  20. VC苹果版:iPhone iOS下载安装《罪恶都市》侠盗飞车GTA的方法

热门文章

  1. 51单片机c语言电子琴程序,51单片机超级电子琴(C语言)
  2. python 动画随人脸动作变化_用Python获取摄像头并实时控制人脸的实现示例
  3. ghost还原服务器系统不行,系统ghost恢复后,Outlook连接不了exchange服务器
  4. c语言年历显示编程,C语言编程题,输出2012年年历
  5. Linux Mint 安装 Docker Engine
  6. 阿里后台四年,想要跳槽字节,艰难4面,已收开发岗offer
  7. 报错h is not defind
  8. 模拟科目一考试的考试系统
  9. NYOJ 139 我排第几个(康托展开)
  10. NOVATEK(联咏)将成为AI视频的生力军