【C++ 真题】P2814 家谱

ops/2025/2/26 6:43:41/

P2814 家谱

题目背景

现代的人对于本家族血统越来越感兴趣。

题目描述

给出充足的父子关系,请你编写程序找到某个人的最早的祖先。

输入格式

输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用 #name 的形式描写一组父子关系中的父亲的名字,用 +name 的形式描写一组父子关系中的儿子的名字;接下来用 ?name 的形式表示要求该人的最早的祖先;最后用单独的一个 $ 表示文件结束。

输出格式

按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式为:本人的名字 + + + 一个空格 + + + 祖先的名字 + + + 回车。

输入输出样例 #1

输入 #1

#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$

输出 #1

Edward Arthur
Walter Arthur
Rodney George
Arthur Arthur

说明/提示

规定每个人的名字都有且只有 6 6 6 个字符,而且首字母大写,且没有任意两个人的名字相同。最多可能有 1 0 3 10^3 103 组父子关系,总人数最多可能达到 5 × 1 0 4 5 \times 10^4 5×104 人,家谱中的记载不超过 30 30 30 代。

思路

我们可以用map,将两个数据类型都定义为string类型,用来存放儿子的父亲,同时可以用substr ( ) 函数来截取字符串,获取人名,在输入父亲时,现将名字暂存到一个变量里,在下一次输入儿子时,将儿子的父亲设为刚刚设置的变量,即:

mp[儿子] = 父亲。

随后用 find ( ) 函数来找到儿子的祖先,具体原理:只要要查找的人名出现在 mp 里 ,即:

mp.count(name) > 0

那么就说明他还是某个人的儿子,不是祖先。

最后,AC代码奉上:

题解

#include"bits/stdc++.h"
using namespace std;
map<string , string> mp; 
string a, f, child;
string find(string x){ //find()用来找一个人名的祖先if(mp.count(x) > 0){ //如果数出来这个人有出现,就说明他是某人的儿子,不是祖先,继续向上找x = find(mp[x]);}return x;
}
int main(){while(true){cin>>a;if(a[0] == '#'){//父亲 f = a.substr(1, 6);//截取父亲人名}else if(a[0] == '+'){//儿子 child = a.substr(1, 6);//截取儿子人名mp[child] = f;//将儿子的父亲设为上面定义的f(父亲名)}else if(a[0] == '?'){//问题 child = a.substr(1, 6);cout<<child<<" "<<find(child)<<endl;//儿子和他的祖先}else if(a[0] == '$'){break;}}return 0;
} 

http://www.ppmy.cn/ops/161370.html

相关文章

中华人民共和国著作权法

目录 中华人民共和国著作权法 第一章 总则 第二章 著作权 第一节 著作权人及其权利 第二节 著作权归属 第三节 权利的保护期 第四节 权利的限制 第三章 著作权许可使用和转让合同 第四章 与著作权有关的权利 第一节 图书、报刊的出版 第二节 表  演 第…

特辣的海藻!4

目录 基础知识点 数对结构 BigInteger split() 题 1.商品库存管理 - 蓝桥云课 2.回文字符串 - 蓝桥云课 3.握手问题 - 蓝桥云课 基础知识点 数对结构 Java中类似C大的pair&#xff0c;自定义 public class Pair<A, B> {private final A first;private final B …

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

子集II力扣--90

目录 题目 思路 代码 题目 给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列。 示例 1&#xff1a; 输入…

华为2025年技术发布会:智能汽车核心技术大爆发

近日&#xff0c;华为在鸿蒙智行尊界技术发布会上发布了多项智能汽车核心技术&#xff0c;涵盖智能驾驶、安全防护、通信系统、座舱交互及电池技术等领域&#xff0c;标志着其从“被动智能”向“自主智能”的战略升级。 以下是核心技术的综合梳理&#xff1a; 六大核心创新 途…

Hadoop 常用命令汇总

Hadoop 常用命令汇总 查看帮助信息查看指定目录文件列表上传文件下载文件移动文件/重命名拷贝文件查找文件查看内容其他命令 HDFS 文件操作命令风格有两种&#xff0c;两种命令效果一样 hadoop fs 开头 hdfs dfs 开头 查看帮助信息 hadoop fs -help [cmd] 查看指定目录文件列表…

DeepSeek 助力 Vue 开发:打造丝滑的滚动动画(Scroll Animations)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

OpenCvSharp编译

前言 算法部分我们使用opencv4.10作为开发&#xff0c;那么我们在.net winform做UI界面开发时&#xff0c;需要进行相关调用。比较简单的方式是直接从NuGet中直接搜索OpencvSharp进行安装。OpecvSharp对Opencv进行了二次封装&#xff0c;在.net中可以快速操作相关对象和算子&am…