• 题目1035:找出直系亲属


    题目描述:
        如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
    输入:
        输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。
        当n和m为0时结束输入。
    输出:
        如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。
        具体含义和输出格式参见样例.
    样例输入:
    3 2
    ABC
    CDE
    EFG
    FA
    BE
    0 0
    样例输出:
    great-grandparent
    -
    
     1 #include <iostream> //1035
     2 #include <algorithm>
     3 #include <set> 
     4 #include <map>
     5 #include <list>
     6 #include <deque>
     7 #include <queue>
     8 #include <stack>
     9 #include <vector>
    10 #include <string>
    11 #include <fstream>
    12 #include <cmath>
    13 #include <ctime>
    14 #include <cstdio>
    15 #include <cctype>
    16 #include <cstring>
    17 #include <sstream>
    18 #include <cstdlib>
    19 #include <cassert>
    20  
    21 using namespace std;
    22  
    23 map<char, char> mp;
    24  
    25 int find(char from, char to){
    26         int sum = 0;
    27         char cur = from;
    28         while(cur != to && mp.count(cur) > 0){
    29                 cur = mp[cur];
    30                 sum++;
    31         }
    32         if(cur != to) return -1;
    33         return sum;
    34 }
    35  
    36 int main(){
    37     int n, m, i, sum1, sum2;
    38     string s;
    39  
    40     while(cin >> n >> m, m+n){
    41             mp.clear();
    42                 for(i = 0; i < n; i++){
    43                         cin >> s;
    44                         mp[s[1]] = s[0];
    45                         mp[s[2]] = s[0];
    46                 }
    47                 for(i = 0; i < m; i++){
    48                         cin >> s;
    49                         sum1 = find(s[0], s[1]);
    50                         sum2 = find(s[1], s[0]);
    51                         if(sum1 == -1 && sum2 == -1)
    52                                 cout << "-" << endl;
    53                         else if(sum1 > 0){
    54                                 if(sum1 == 1) cout << "parent" << endl;
    55                                 else {
    56                                         while(sum1 > 2){
    57                                                 cout << "great-";
    58                                                 sum1--;
    59                                         }
    60                                         cout << "grandparent" << endl;
    61                                 }
    62                         }else{
    63                                 if(sum2 == 1) cout << "child" << endl;
    64                                 else {
    65                                         while(sum2 > 2){
    66                                                 cout << "great-";
    67                                                 sum2--;
    68                                         }
    69                                         cout << "grandchild" << endl;
    70                                 }
    71                         }
    72                 }
    73     }
    74     return 0;
    75 }
    
    
  • 相关阅读:
    B507实验室打印机连接方法
    2016年武汉大学计算机学院“新技术系列讲座”简介记录
    使用SpringBoot快速构建应用程序
    UIColor,CGColor,CIColor三者的区别和联系
    Objective C中NULL、Nil、nil、NSNull 的区别
    iOS 部分机制
    常见排序算法-采用Objective-c实现
    iOS的永久存储
    网络协议初探
    iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
  • 原文地址:https://www.cnblogs.com/chchche/p/3466049.html
Copyright © 2020-2023  润新知