天梯题集——冰岛人(隐藏条件:考虑嫡系)

本文分享了解决‘冰岛人’问题的思路,强调了解题难点,包括考虑嫡系关系、避免递归导致的超时,采用循环提高效率,以及使用映射和结构体记录数据的方法。通过总结他人的代码,指出即使不覆盖所有情况也能通过判题,揭示了比赛策略。
摘要由CSDN通过智能技术生成
前文

愿天下有情人都是失散多年的兄妹 与 冰岛人 解题思路几乎是同理的,不过这里需要考虑多一个是否嫡系的关系
(卡了我好久、又来一个隐藏条件,长知识、长知识…)。
用递归实现很容易出现超时,循环果然比递归效率高。
循环与递归效率的比较

冰岛人

t1
t2
t3


解题难点

①、记录数据——映射+结构体

struct node{
   
	string fa;
	int sex;
};
map <string, node> num;

第一次把映射和结构体结合起来,查询方便了许多。


②、判断 m1 与 m2 是否是嫡亲

//判断 s1 是否为 s2 的嫡系
bool judge1(string s1, string s2){
   
	for(string A=s1; !A.empty(); A=num[A].fa)
		if(A==s2) return false;
	return true;
}

③、m1 与 m2 五代以内无有公共祖先

//s1与s2五代以内无有公共祖先 
bool judge2(string s1, string s2){
   
	int i=1;
	string A, B;
	for(A=s1; !A.empty()&&i<=5; i++){
   
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值