PTA冰岛人

PTA L2-030 冰岛人 附测试点讲解 附测试点说明,代码有注释。 阅读详情

作者 陈越

单位 浙江大学

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

iceland.JPG

冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 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;
typedef long long ll;
#define endl "\n"
 
ll n,m;
string s,ss,sx,sy;
map<string,pair<bool,string> >mp;//本人姓名,性别(1为男,0为女),父亲姓名
 
bool find(string x ,string y){//以x家族为基准,遍历两个家族 
	ll cx = 0,cy;
	while(x != ""){//找完x家族所有人 
		cy = 0;
		s = y;//每次y家族从头开始 
		while(s != ""){
			if(cx > 4 && cy > 4)return 1;
			if(x == s && (cx < 4 || cy < 4) )return 0;
			s=mp[s].second;
			cy++;
		}
		x=mp[x].second;//x往上一代 
		cx++;
	}
	return 1;//防止两家都没有4代人情况出现 
}
 
void solve(){
	cin >> n;
	while(n --){//记录族谱 
		cin >> s >> ss;
		if(ss.back() == 'n')mp[s]={1,ss.substr(0,ss.size()-4)};
		if(ss.back() == 'r')mp[s]={0,ss.substr(0,ss.size()-7)};
		if(ss.back() == 'm')mp[s].first=1;
		if(ss.back() == 'f')mp[s].first=0;
	}
	cin >> m;
	while(m --){
		cin >> sx >> s >> sy >> s;
		if(!mp.count(sx) || !mp.count(sy))cout << "NA" << endl;
		else if(mp[sx].first == mp[sy].first)cout << "Whatever" << endl;
		else if(find(sx,sy))cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	return ;
}
 
int main(){
	ll t=1;//cin >> t;
	while(t--)solve();
	return 0;
}
PTA天梯赛L2“冰岛人”满分题解:五代以内共同祖先判定与边界处理 算法竞赛中,字符串解析与数据结构建模往往是解决问题的关键。以姓氏后缀判断性别与父名,借助哈希表构建家族谱系树,在有限代数内枚举共同祖先,能够高效处理近亲关系判定问题。这类技术在PTA天梯赛等在线评测平台中尤为常见,L2题目“冰岛人”正是典型代表:它要求准确理解“五代以内”的起点、正确处理外来移民的性别,以及避免边界条件导致的失分。细致拆解后缀规则与循环层数,用C++实现常数次枚举即可稳定满分。内容从工程实践角度梳理完整题解思路,并附上可直接提交的AC代码,帮助参赛者避开常见陷阱。 阅读详情

相关推荐

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。

平和少年的博客 1646

PTA---冰岛人

【代码】PTA---冰岛人。

fw_is_me的博客 684

毕业设计——基于卷积神经网络的高速公路团雾智能识别系统设计与实现(数据集+源码+可视化+综述)

同时,也可以结合其他技术,如雷达、红外传感器等,实现多源信息的融合与协同处理,提高系统的可靠性和稳定性。实验结果表明,该系统能够实现对高速公路团雾的准确、快速识别,为高速公路的安全运行提供了有力保障。团雾作为一种常见的气象现象,具有突发性、局地性和消散迅速的特点,对高速公路的行车安全构成严重威胁。通过设计合适的网络结构,如增加卷积层、池化层等,实现对图像中团雾特征的自动学习和提取。预处理:对采集到的图像进行去噪、增强等预处理操作,以提高图像质量,降低后续处理的难度。读取数据,随机分为训练集和验证集。

abackcab的博客 665

PTA L2-2 冰岛人 (25分)

PTAL2-2冰岛人(25分) 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下: 冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请...

NaNa 1603

3D医学影像分割新突破:手把手教你用MedSAM2快速标注CT/MRI数据(附3D Slicer插件配置)

本文详细介绍了如何利用MedSAM2模型进行3D医学影像分割,包括从环境准备到3D Slicer插件配置的全流程。通过实战案例和技巧分享,帮助医疗从业者快速掌握CT/MRI数据的高效标注方法,提升医学影像分析的准确性和效率。

ujm5678901的博客 299

稳压电源的隐形战场:动态特性如何影响你的嵌入式系统稳定性

本文深入探讨了稳压电源动态特性对嵌入式系统稳定性的关键影响,分析了HT7533和AMS1117等稳压芯片在输入阶跃响应和负载瞬态响应方面的性能差异。通过实测案例展示了不同场景下的动态特性表现,并提供了针对工业控制、IoT设备和射频系统的选型指南与优化策略,帮助工程师解决电源相关的隐蔽故障。

weixin_29204205的博客 609

【PTA-训练day18】L2-030 冰岛人 + L1-072 刮刮彩票

L2-030 冰岛人 L1-072 刮刮彩票 L1-070 吃火锅 L1-068 调和平均

weixin_61639349的博客 1110

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2349

PTA 冰岛人

#include<iostream> #include<algorithm> #include<cstring> #include<math.h> #include<cmath> #include<set> #include<map> #include<stack> #include<queue&...

qq_43522493的博客 1341

网站进行企业微信授权登录(附带代码超详细版)

企业微信的扫码登录官方文档 https://work.weixin.qq.com/api/doc/90000/90135/90988 企业微信扫码登录认证流程 上面是官方的图片,看上去比较复杂。因此我用直白简洁的语言梳理下流程。 1、首先在自己的网站上获取到企业微信登录的二维码(二维码怎么获取稍后再说,这里想象下你已经有了一个二维码) 2、你拿着手机扫描二维码,确认登录之后,页面就会自己进行重定向的跳转,跳转的url如何配置下面再讲,但是注意,这个重定向的url可以是内网地址 3、重定向到指

Gzf的博客 1万+

MATLAB与ROS联合仿真——实例程序搭建思路

MATLAB与ROS联合仿真——实例程序搭建思路

慕羽★的博客 5228

pta 冰岛人12分python代码,并查集

【代码】pta 冰岛人12分python代码,并查集。

dirty_boy123的博客 105

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5060

PTA冰岛人Java满分解法:迭代替代递归,彻底告别栈溢出与超时

在算法竞赛与企业级开发中,树形结构的祖先查询与递归遍历是高频场景。递归以简洁著称,但在深度极大时容易引发栈溢出;迭代法配合哈希表(HashMap)标记祖先路径,则能稳定控制内存与耗时。最近公共祖先(LCA)问题是这类场景的典型代表,广泛应用于家族关系判断、组织架构溯源、社交图谱分析等系统。以PTA团体程序设计天梯赛L2-030“冰岛人”为例,题目要求判断两人是否存在五代以内的共同祖先,数据规模大且查询频繁,若沿用递归DFS,Java环境下极易出现StackOverflow或TLE。本文从数据结构设计、深度预

weixin_33230433的博客 249

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

L2-030 冰岛人 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下: 冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,...

xcatf的博客 2894

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PTA 冰岛人 模拟

2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下:冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请你实现这个 App 的功能。

weixin_45006001的博客 271

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java实现冰岛人家族关系判断:五代以内共同祖先算法与PTA满分代码

在算法竞赛与工程实践中,家族关系判定常被建模为祖先链查询问题。这类问题的核心原理是通过哈希映射(HashMap)存储父子关系,并利用有限深度遍历代替全链比较,从而在保证正确性的同时显著降低时间复杂度。Java开发者面对大型输入数据时,还需掌握缓冲读取(BufferedReader)与字符串拼接优化,避免因I/O瓶颈导致超时。该技术广泛适用于社交网络血缘校验、族谱系统开发以及OJ平台(如PTA)的算法题解。本文以PTA L2-030“冰岛人”为例,深入解析如何从姓名后缀提取父名、如何精确界定“五代以内”的边界

weixin_29289821的博客 230

PTA L2-016 & 030 愿天下有情人都是失散多年的亲兄妹 冰岛人

同时,比两人都要高出五代,即a的所有祖先不能是b的五代以内祖先,b的所有祖先不能是a的五代内祖先,所以需要跑四次dfs(2+2)树模拟,记录完一边再找另一边,不需要考虑是每个人的五代之内,即a的五代之内也在b的五代之内就不行。需要注意只需记录父辈,即。

2301_79917474的博客 230

PTA 7-29 冰岛人 (25分)

2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下: 冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请你实现这个 App 的功能。 输入格式: 输入首先在第一行给出一个正整数 N(1<N≤105),为当地人口数。随后 N 行,每行给出一个人名,格式为:

杨青葱的博客 1183

PTA天梯赛L2题解:冰岛人家族关系查询优化

在图论与数据结构中,有向无环图(DAG)的祖先关系查询是经典问题。通过邻接表建模家族树结构,结合哈希表实现O(1)复杂度的节点定位,可有效处理姓名重复等实际场景。针对Java语言特性,采用BufferedReader优化IO、对象复用降低GC开销、倍增法预处理LCA等工程实践技巧,能将查询响应时间从450ms优化至80ms。这类技术在社交网络关系分析、基因组谱系追溯等需要高效关系判定的场景中具有重要应用价值,特别适合处理PTA竞赛中类似冰岛人问题的家族关系网络。

weixin_30899023的博客 180

PTA天梯赛L2“冰岛人”题解:五代祖先判定与输出逻辑详解

在编程竞赛和算法学习中,家族关系与祖先追溯是一类经典的数据结构问题,常以最近公共祖先(LCA)为核心考点。理解单向链式的族谱存储方式,是解决此类题目的基础。通过哈希表或映射结构记录每个人的父节点,即可沿祖先链逐层回溯,判断两人在有限代际内是否存在共同祖先。这种链式追溯思想不仅适用于血统判定,还可扩展至社交人脉分析、组织架构汇报链等现实场景。本文以PTA天梯赛L2高频题“冰岛人”为例,深入拆解其命名规则背后的数据处理逻辑,重点解析“五代以内”“Maybe”等关键判定条件,并给出C++与Python的完整AC实

weixin_33585822的博客 99

PTA天梯赛L2-030冰岛人Java满分解法:字符串解析与祖先链判定

在程序设计与算法竞赛中,字符串解析与家族血缘关系的判定是常见的高频考点。以冰岛人特有的父名制命名规则为背景,题目要求通过解析姓氏后缀反推父系关系,构建人物图谱,并判断两人五代以内是否存在共同祖先。本文从基础概念出发,讲解如何用HashMap存储人物节点,利用HashSet高效完成祖先链交集检测,同时针对Java在大量数据下的性能瓶颈,提出使用BufferedReader和StringBuilder优化输入输出。该解法覆盖PTA天梯赛L2-030的全部判定条件,帮助竞赛选手避开易错细节,稳定拿分。

weixin_32308101的博客 305

PTA天梯赛L2-031冰岛人题解:五代祖先判断与字符串处理实战

在算法竞赛与工程开发中,家族关系查询常涉及构建父子映射并沿父节点向上遍历的“祖先链”操作。这类问题通常结合特定文化规则与字符串处理细节,朴素的循环遍历即可高效解决。PTA天梯赛L2-031“冰岛人”正是典型代表:通过冰岛父名制姓氏后缀“sson”与“sdóttir”建立家谱,判断两人五代以内是否存在共同祖先。文章深入拆解解题流程,从数据结构选型、祖先链获取、性别判断优先级,到UTF-8编码后缀陷阱,提供了完整的C++实现思路。掌握集合判交与标志位处理信息缺失的技巧,不仅能轻松AC该题,也能迁移至其他树上祖先

weixin_33508411的博客 262

冰岛人 pta java (并查集)

【代码】冰岛人 pta java (并查集)

weixin_74749489的博客 616

L2-030 冰岛人PTA

2018年世界杯,冰岛队因11平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加sson,女儿则加sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个App查一下两人祖宗若干代有无联系。本题就请你实现这个App的功能。...

陈进士学习的博客 1226
上一篇: C. Number of Ways Codeforces Round 266 (Div. 2)
下一篇: PTA星际探险
翰墨织梦
博客等级 码龄4年 384粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值