华为机试题-养猪场防疫

2024-03-14 00:52
文章标签 华为 试题 防疫 养猪场

本文主要是介绍华为机试题-养猪场防疫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

老李在多年前承包了一个养猪场,并引入了若干只种猪,经过这些年的经营,现在养猪场有
N 只猪,编号从 0 到 N-1(每只猪无论生死都有唯一的编号);老李在每只猪生产的时候记下了生产的母猪和出生的小猪,格式:x y1 y2 y3…([注:x 为猪妈妈,y1、 y2、y3….为新生的猪惠,以上编码均在 0…N-1 内,每只猪可以多次生产,每个猪崽只有一个猪妈妈);
为了防疫需要,要检查任意两只猪是否有亲戚关系(两只猪具有相同的祖先),并计算出关系亲疏情况(关系距离,相同编号距离为 0). 解答要求
时间限制:CIC++1000ms.其他语言:2000ms 内存限制:CIC++ 256MB,其他语
言:512MB
输入
第一行输入总数 N
第二行表示后续生产记录行数 M, 后续 M 行输入生产记录,以空格分隔 x y1 y2 y3
最后一行输入 m1, m2:表示待检查的 m1 和 m2 编号【取值范围】
0<N<=1000000000 0<=M<10000
输出
一个整数,表示 m1 和 m2 之间的关系距离,无亲戚关系输出-1
样例 1
输入:
3
1
0 1 2
0 1
输出:1
解释:0 号生产了 1 号和 2 号
所以 0 号和 1 号是有亲戚关系(0-1),且关系距离为 1

参考代码

整体思路使用map来存储关系,一开始看以为是并查集,但是并查集只能判断是不是亲戚关系,不太好计算关系的距离,如果有大佬可以按照并查集的思路,麻烦写在评论区,感谢!!!

package RealTest;/*** @ClassName PigRelationship* @Description TODO* @Author 21916* @Date 2024/3/13 20:58*/import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class PigRelationship {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = Integer.parseInt(scanner.nextLine()); // 猪的总数int M = Integer.parseInt(scanner.nextLine()); // 母子关系的数量Map<Integer, Integer> pigsMum = new HashMap<>(); // 猪的母亲映射for (int i = 0; i < M; i++) {System.out.println("请输入第" + (i + 1) + "行的数据,母亲编号和儿子编号以空格分隔,结束后按Enter键:");String line = scanner.nextLine(); // 读取整行输入String[] parts = line.trim().split("\\s+"); // 使用空格分割字符串if (parts.length < 2) {System.out.println("错误:每行至少需要一个母亲编号和一个儿子编号。");continue; // 如果输入不符合要求,跳过当前行并继续下一行}int pigMum = Integer.parseInt(parts[0]); // 母亲编号for (int j = 1; j < parts.length; j++) { // 从第二个元素开始遍历,它们是儿子编号int pigSon = Integer.parseInt(parts[j]); // 儿子编号System.out.println("pigSon: " + pigSon);pigsMum.put(pigSon, pigMum); // 将儿子映射到母亲}}System.out.println("输入完成了");// 将没有儿子的猪(可能是母亲)映射到-1for (int i = 0; i < N; i++) {if (!pigsMum.containsKey(i)) {pigsMum.put(i, -1);}}int m1 = scanner.nextInt(); // 第一只猪的编号int m2 = scanner.nextInt(); // 第二只猪的编号Map<Integer, Integer> distance = new HashMap<>(); // 存储猪到m1的距离映射int tmp = m1;int d = 0;// 从m1向上遍历到m2或根节点while (tmp != -1) {if (tmp == m2) {System.out.println(d);scanner.close();return;} else {distance.put(tmp, d);d++;tmp = pigsMum.getOrDefault(tmp, -1); // 如果找不到映射,返回-1System.out.println("tmp"+tmp);}}tmp = m2;d = 0;// 从m2向上遍历,查看是否能找到与m1共享的祖先while (tmp != -1) {if (distance.containsKey(tmp)) {System.out.println(d + distance.get(tmp));scanner.close();return;} else {d++;tmp = pigsMum.getOrDefault(tmp, -1); // 如果找不到映射,返回-1}}System.out.println(-1); // 如果没有共享祖先,输出-1scanner.close();}
}

这篇关于华为机试题-养猪场防疫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806777

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

华为 HCIP-Datacom H12-821 题库 (13)

有需要题库的可以看主页置顶 1.可以携带外部路由的 tag 标签信息的是以下哪一类 LSA? A、4 类 LSA B、5 类 LSA  C、3 类 LSA  D、2 类 LSA 答案:B 解析: 暂无解析 2..两台路由器直连,并设定网络类型为 p2p 建立OSPF 邻居。那么两台路由器传输 OSPF 报文的目的 IP 地址是以下哪一项? A、使用组播地址 224.0.0.6 B

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

实现的动态规划问题华为笔试题C++实现

秋招刷力扣题,我觉得我对动态规划不是熟练,在此处做总结 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。我觉得最大的问题就是对问题的分解,分解后的问题与分解前的问题具有相同的决策机制,将决策机制进行抽象,最终可以得到对应的解; 动态规划中开始介绍的爬楼梯等问题,答

828华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台

华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Halo介绍2.1 Halo 简介2.2 Halo 特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买华为云Flexus云服务器X实例4.

三方登录 - 华为登录

1.1. 开发准备 当应用需要使用以下开放能力的一种或多种时,为正常调试运行应用,需要预先添加公钥指纹 Account Kit(华为帐号服务)Call Kit(通话服务)Game Service Kit(游戏服务)Health Service Kit(运动健康服务)IAP Kit(应用内支付服务)Live View Kit(实况窗服务,当需要使用Push Kit时必须执行此步骤)Map Kit