L2-030 冰岛人

需要注意的地方:

  1. 我们只记录维京人的祖先,除了维京人的其他人不能记录它的祖先
#include <bits/stdc++.h>

using namespace std;

struct people {
    string name, familyname;
    char gender;
};
map<string, string> fa;
map<string, bool> sex; //1表示男性 0表示女性s

people tran(string name, string familyname) {
    string s = familyname;
    int len = familyname.length();
    if (len >= 7) {
        if (s.substr(len - 7) == "sdottir") return { name, s.substr(0, len - 7), 'f' };
        else if (s.substr(len - 4) == "sson") return { name, s.substr(0, len - 4), 'm' };
    }
    else if (len >= 4) {
        if (s.substr(len - 4) == "sson") return { name, s.substr(0, len - 4), 'm' };
    }
    return { name, s.substr(0, len - 1), s.back() };
}

bool check(string name1, string name2) {
    map<string, int> gener;
    for (int i = 1; name1 != ""; i++) {
        gener[name1] = i;
        name1 = fa[name1];       
    }
    for (int i = 1; name2 != ""; i++) {
        if (gener.count(name2)) {
            if (gener[name2] >= 5 && i >= 5) return true;
            return 0;
        }
        name2 = fa[name2];
    }

    return true;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        string name, familyname;
        cin >> name >> familyname;
        auto aft = tran(name, familyname);
        sex[aft.name] = (aft.gender == 'm' ? 1 : 0);
        if (familyname.back() != 'm' && familyname.back() != 'f')
            fa[aft.name] = aft.familyname;
    }
    int m;
    cin >> m;
    for (int i = 1; i <= m; i++) {
        string n1, f1, n2, f2;
        cin >> n1 >> f1 >> n2 >> f2;
        if (!sex.count(n1) || !sex.count(n2)) cout << "NA" << "\n";
        else if (sex[n1] == sex[n2]) cout << "Whatever" << "\n";
        else {
            if (check(n1, n2)) {
                cout << "Yes" << "\n";
            } else {
                cout << "No" << "\n";
            }
        } 
    }

    return 0;
}


// 14
// chris smithm
// adam smithm
// bob adamsson
// bill chrissson
// mike jacksson
// steve billsson
// tim mikesson
// april mikesdottir
// eric stevesson
// tracy timsdottir
// james ericsson
// patrick jacksson
// robin patricksson
// will robinsson

posted @ 2022-04-13 10:50  Xxaj5  阅读(39)  评论(0编辑  收藏  举报