2023年世界盃,冰島隊因1:1平了強大的阿根廷隊而一戰成名。好事者發現冰島人的名字後面似乎都有個「松」(son),於是有網友科普如下:
輸入首先在第一行給出乙個正整數 n(1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為:名1 姓1 名2 姓2。注意:這裡的姓是不帶字尾的。四個字串均由不超過 20 個小寫的英文本母組成。
題目保證不存在兩個人是同名的。
對每乙個查詢,根據結果在一行內顯示以下資訊:
若兩人為異性,且五代以內無公共祖先,則輸出 yes;
若兩人為異性,但五代以內(不包括第五代)有公共祖先,則輸出 no;
若兩人為同性,則輸出 whatever;
若有一人不在名單內,則輸出 na。
所謂「五代以內無公共祖先」是指兩人的公共祖先(如果存在的話)必須比任何一方的曾祖父輩分高。
15chris 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
6tracy tim james eric
will robin tracy tim
april mike steve bill
bob adam eric steve
tracy tim tracy tim
x man april mikes
yesno
nowhatever
whatever
na作者
陳越單位
浙江大學
**長度限制
16 kb
時間限制
400 ms
記憶體限制
64 mb
c++ (clang++ 6.0.1)
雖然**長了點,但是時間複雜度okk的呀~
首先姓氏沒有用的,然後題目中最後一句話----所謂「五代以內無公共祖先」是指兩人的公共祖先(如果存在的話)必須比任何一方的曾祖父輩分高。
就是兩個人的祖先相同,只要乙個人的父輩在5代以內就不行。所以用了兩遍dfs的過程來判斷
#include
using
namespace std;
mapint> mp;
struct nodere[
100010];
vector<
int> ma[
100010];
bool vis[
100010];
void
dfs(
int st,
int k)
}bool judge =
true
;void
dfs2
(int st,
int k)
}int
main()
for(
int i=
1;i<=n;i++
)else
else
if(k.
substr
(k.size()
-7,7
)=="sdottir")}
}int k;
cin>>k;
while
(k--)}
}
在處理資料輸入的時候,不能用數字id去對每乙個名字標號,就是會出現父親節點在兒子節點之後出現的情況,所以不能直接用mp【parent】 去做!!
這樣mp[parent] 就可能會是0,出錯啦就
#include
using
namespace std;
struct nodere[
100010];
mapint> mp;
bool
judge
(string a,string b)
}return1;
}int
main()
;//就是會出現父親節點在兒子節點之後出現的情況,所以不能直接用mp【parent】 去做!!
else
if(b.
back()
=='r'
) re[i]=;
else re[i]
.***=b.
back()
;}cin>>k;
while
(k--
)return0;
}
L2 030 冰島人 25分
輸入格式 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字串均由不超過 20 個小寫的英文本母組成。題目保證不存在兩個人是同名的。輸出格式 對每乙個查詢,根據結果在一行內顯示以...
天梯賽 L2 030 冰島人
題意 給你n個人的姓名,他們組成了若干個家族,再給出m個詢問,每次詢問給出兩個人的姓名,問他們能否交往,只要最近公共祖先必須與任何乙個人相隔超過5代才能交往。思路 對每個人的名字進行編號,然後把字尾給去掉,根據名和姓建立若干棵家族樹,再用乙個節點把這若干棵樹給連成一顆樹,找最近公共祖先,特判一下0號...
L2 2 冰島人 (25 分
2018年世界盃,冰島隊因1 1平了強大的阿根廷隊而一戰成名。好事者發現冰島人的名字後面似乎都有個 松 son 於是有科普如下 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字...