蓝桥杯 ALGO-94 算法训练 新生舞会

版权声明:【https://github.com/liuchuo】大四在校生,水平有限,还望学长们多多包涵,Github真诚求Star~不甚感激!!!(卖萌脸ヾ(=^▽^=)ノ https://blog.csdn.net/liuchuo/article/details/84257814

问题描述
新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。

输入
第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。
之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。

输出
对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。

样例输入
4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jack

样例输出
N
Y
N


分析:1.用map存储名字对应学号,学号对应名字,以及名字和学号分别对应性别
2.判断是不是本人和性别是否为异性即可~

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<string, string> sex;
    map<string,string> id_name;
    int n,k;
    cin >> n;
    for(int i = 0; i < n; i++){
        string id, name, tsex;
        cin >> id >> name >> tsex;
        id_name[id] = name;
        id_name[name] = id;
        sex[id] = sex[name] = tsex;
    }
    cin >> k;
    for(int i = 0; i < k; i++){
        string s1 , s2;
        cin >> s1 >> s2;
        if(id_name[s1] != s2 && sex[s1] != sex[s2]) cout << "Y\n";
        else cout << "N\n";
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liuchuo/article/details/84257814