天梯題集——冰島人(隱藏條件:考慮嫡系)
前文
願天下有情人都是失散多年的兄妹 與 冰島人 解題思路幾乎是同理的,不過這裡需要考慮多一個是否嫡系的關係。
(卡了我好久、又來一個隱藏條件,長知識、長知識…)。
用遞迴實現很容易出現超時,迴圈果然比遞迴效率高。
迴圈與遞迴效率的比較
冰島人
解題難點
①、記錄資料——對映+結構體
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++){
int j=1;
for(B=s2; !B.empty()&&j<=5; j++){
if(A==B&&(i<5||j<5))
return 0;
B=num[B].fa;
}
A=num[A].fa;
}
return 1;
}
實現程式碼
#include<bits/stdc++.h>
using namespace std;
struct node{
string fa;
int sex;
};
map <string, node> num;
//判斷 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;
}
//s1與s2五代以內無有公共祖先
bool judge2(string s1, string s2){
int i=1;
string A, B;
for(A=s1; !A.empty()&&i<=5; i++){
int j=1;
for(B=s2; !B.empty()&&j<=5; j++){
if(A==B&&(i<5||j<5))
return 0;
B=num[B].fa;
}
A=num[A].fa;
}
return 1;
}
int main(){
int n, k;
scanf("%d", &n);
for(int i=0; i<n; i++){
string m, x;
cin>>m>>x;
//判斷性別
switch(x[x.size()-1]){
case 'm': num[m].sex = 'm';
break;
case 'f': num[m].sex = 'f';
break;
case 'n': num[m].fa = x.substr(0, x.size()-4);
num[m].sex = 'm';
break;
case 'r': num[m].fa = x.substr(0, x.size()-7);
num[m].sex = 'f';
break;
}
}
cin>>k;
for(int i=0; i<k; i++){
string m1, x1, m2, x2;
cin>>m1>>x1>>m2>>x2;
if(num.find(m1)==num.end()||num.find(m2)==num.end())
cout<<"NA\n";
else if(num[m1].sex==num[m2].sex)
cout<<"Whatever\n";
else{
if(judge1(m1, m2)&&judge1(m2, m1)&&judge2(m1, m2))
cout<<"Yes\n";
else
cout<<"No\n";
}
}
return 0;
}
總結
看了網上一些程式碼,並沒有將全部情況都考慮到,但判題時能夠通過全部樣例,就很神奇。
比賽期間儘管提交,能混到分的話,就很妙…
相關文章
- L2-030 冰島人
- L2-030 冰島人 (25分)
- css隱藏滾動條CSS
- 使用CSS隱藏元素滾動條CSS
- PbootCMS隱藏指定 scode 的選單各種條件判斷和標籤boot
- 我考慮的是來看考慮考慮勞福德
- 周志華:滿足這三大條件,可以考慮不用深度神經網路神經網路
- 記一次滾動條隱藏
- 隱藏滾動條保留滾動效果
- AppCompatActivity隱藏標題欄APP
- css隱藏滾動條並可以滾動CSS
- 註冊庫克群島公司的(CookIslands) 條件
- IT技術人員轉行大資料,應該考慮那些問題大資料
- odoo12 Tree檢視建立編輯旁邊新增按鈕,並根據條件隱藏Odoo
- 導航欄的隱藏問題
- 隱藏索引索引
- 華熙LIVE五棵松“冰菱花”已具備運營條件
- Mac顯示和隱藏“隱藏檔案”命令Mac
- MongoDB叢集搭建(包括隱藏節點,仲裁節點)MongoDB
- 隱藏資料夾怎麼取消隱藏 關閉隱藏檔案的辦法
- 資料庫選型要考慮哪些問題?資料庫
- 2.5.11.2 FORCE LOGGING 模式需要考慮的效能問題模式
- 遷移資料庫資料考慮問題資料庫
- 由一次KPI考慮到的問題KPI
- 2018世界盃奈及利亞vs冰島誰會贏 奈及利亞vs冰島比分預測
- css實現隱藏滾動條並可以滾動內容CSS
- chrome,firfox,IE實現隱藏滾動條但是可以正常滾動(瀏覽器自帶隱藏屬性實現)Chrome瀏覽器
- Oracle 隱藏列Oracle
- GridManager 隱藏列
- 輕鬆隱藏桌面檔案,檔案隱藏工具FileUnhiderIDE
- steam隱私設定在哪 steam怎麼隱藏個人資料狀態
- 考慮時區了嗎?
- 資料安全與個人隱私:美國人的焦慮與變化
- 冰島國家統計局:2020年第一季度中國赴冰島遊客人數增長6.2%
- 2018世界盃冰島vs克羅埃西亞誰會贏 冰島vs克羅埃西亞比分預測
- MySQL隱碼攻擊直接獲取Shell的前提條件MySql
- 在考慮繼續堅持現有崗位,還是考慮轉崗
- mac顯示隱藏檔案,取消顯示隱藏檔案Mac