当前位置: 首页 > news >正文

精准核酸检测 - 华为OD统一考试

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。

现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹的交叉。

现在给定一组确诊人员编号(X1,X2,X3…Xn) 在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测)

需要进行核酸检测的人,是病毒传播链条上的所有人员,即有可能通过确诊病例所能传播到的所有人。

例如:A是确诊病例,A和B有接触、B和C有接触 C和D有接触,D和E有接触。那么B、C、D、E都是需要进行核酸检测的。

输入描述

第一行为总人数N

第二行为确诊病例人员编号 (确证病例人员数量 < N) ,用逗号隔开

接下来N行,每一行有N个数字,用逗号隔开,其中第i行的第个j数字表名编号i是否与编号j接触过。0表示没有接触,1表示有接触

输出描述

输出需要做核酸检测的人数

补充说明

  • 人员编号从0开始
  • 0 < N < 100

示例1

输入:
5
1,2
1,1,0,1,0
1,1,0,0,0
0,0,1,0,1
1,0,0,1,0
0,0,1,0,1输出
3说明:
编号为1、2号的人员为确诊病例1号与0号有接触,0号与3号有接触,2号54号有接触。所以,需要做核酸检测的人是0号、3号、4号,总计3人要进行核酸检测。

题解

经典的连通问题,这里使用并查集的简单模板套用即可解决。

如果对并查集不会,可以通过 https://zhuanlan.zhihu.com/p/93647900 来学习。

Java

import java.util.Arrays;
import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());// 确诊人员编号int[] confirm = Arrays.stream(in.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();// 使用并查集将所有确诊的人员合并成一组int start = confirm[0];UnionFind uf = new UnionFind(n);for (int i = 1; i < confirm.length; i++) {uf.merge(start, confirm[i]);}// 将所有有接触的人进行合并操作for (int i = 0; i < n; i++) {int[] row = Arrays.stream(in.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();for (int j = 0; j < row.length; j++) {if (row[j] == 1) {uf.merge(i, j);}}}int cnt = 0; // 已经确认的总人数for (int i = 0; i < n; i++) {if (uf.find(i) == uf.find(start)) cnt++;}// 输出, 这里排除了确诊病例自身不需要再做核酸检测人System.out.println(cnt - confirm.length);}
}class UnionFind {// father[2] = 3 表示元素2的父节点是3public int[] father;public UnionFind(int len) {father = new int[len + 1];for (int i = 0; i <= len; i++) {father[i] = i;}}// 查询 x 的根节点public int find(int x) {if (x < 0 || x >= father.length) {throw new RuntimeException("查询越界");}// 合并(路径压缩)return (x == father[x] ? x : (father[x] = find(father[x])));}// 合并节点, y 的根节点指向 x 的根节点public void merge(int x, int y) {int xRoot = find(x), yRoot = find(y);father[yRoot] = xRoot;}
}

Python

class UnionFind:def __init__(self, length):self.father = list(range(length + 1))def find(self, x):if not (0 <= x < len(self.father)):raise ValueError("查询越界")# 合并(路径压缩)if x != self.father[x]:self.father[x] = self.find(self.father[x])return self.father[x]def merge(self, x, y):x_root, y_root = self.find(x), self.find(y)self.father[y_root] = x_rootdef main():n = int(input())confirm = list(map(int, input().split()))# 使用并查集将所有确诊的人员合并成一组start = confirm[0]uf = UnionFind(n)for i in range(1, len(confirm)):uf.merge(start, confirm[i])# 将所有有接触的人进行合并操作for i in range(n):row = list(map(int, input().split()))for j in range(len(row)):if row[j] == 1:uf.merge(i, j)cnt = 0  # 已经确认的总人数for i in range(n):if uf.find(i) == uf.find(start):cnt += 1# 输出, 这里排除了确诊病例自身不需要再做核酸检测人print(cnt - len(confirm))if __name__ == "__main__":main()

C++

#include <iostream>
#include <vector>
#include <sstream>using namespace std;class UnionFind {
public:vector<int> father;UnionFind(int len) {father.resize(len + 1);for (int i = 0; i <= len; i++) {father[i] = i;}}int find(int x) {if (x < 0 || x >= father.size()) {throw out_of_range("查询越界");}return (x == father[x] ? x : (father[x] = find(father[x])));}void merge(int x, int y) {int xRoot = find(x), yRoot = find(y);father[yRoot] = xRoot;}
};int main() {int n;cin >> n;cin.ignore();  // 消耗掉换行符string confirmInput;getline(cin, confirmInput);stringstream confirmStream(confirmInput);vector<int> confirm;int confirmNum;while (confirmStream >> confirmNum) {confirm.push_back(confirmNum);if (confirmStream.peek() == ',') {confirmStream.ignore();}}int start = confirm[0];UnionFind uf(n);for (size_t i = 1; i < confirm.size(); i++) {uf.merge(start, confirm[i]);}for (int i = 0; i < n; i++) {string rowInput;getline(cin, rowInput);stringstream rowStream(rowInput);int contact;for (int j = 0; j < n; j++) {rowStream >> contact;if (contact == 1) {uf.merge(i, j);}if (rowStream.peek() == ',') {rowStream.ignore();}}}int cnt = 0;for (int i = 0; i < n; i++) {if (uf.find(i) == uf.find(start)) {cnt++;}}cout << cnt - confirm.size() << endl;return 0;
}

(并查集)相关练习题

题号题目难易
LeetCode 12021202. 交换字符串中的元素中等
LeetCode 17221722. 执行交换操作后的最小汉明距离中等
LeetCode 947947. 移除最多的同行或同列石头中等
LeetCode 924924. 尽量减少恶意软件的传播困难

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

相关文章:

精准核酸检测 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 为了达到新冠疫情精准防控的需要&#xff0c;为了避免全员核酸检测带来的浪费&#xff0c;需要精准圈定可能被感染的人群。 现在根据传染病流调以及大数据分析&a…...

LINUX文件fd(file descriptor)文件描述符

目录 1.文件接口 1.1open 1.2C语言为什么要对open进行封装 2.fd demo代码 第一个问题 第二个问题 打开文件流程 引言&#xff1a;在学习C语言的时候&#xff0c;我们见过很多的文件的接口&#xff0c;例如fopen&#xff0c;fwrite&#xff0c;fclose等等&#xff0c;但…...

SpringMVC 的理解

MVC MVC&#xff08;Model-View-Controller&#xff09;是一种软件设计模式&#xff0c;用于实现用户界面。它将应用程序划分为三个互相交互的部分&#xff0c;以分离内部逻辑表示和表现层。这种分离有助于管理复杂的应用程序&#xff0c;因为它允许开发者单独修改模型、视图或…...

SpringBoot 3.1.7 集成Sentinel

一、背景 我的项目需要引入限流&#xff0c;降级&#xff0c;熔断框架&#xff0c;由于 Spring Cloud 2022.0.4 已经不再支持 Hystrix&#xff0c;Spring Cloud 提供了替代方案&#xff0c;如 Resilience4j&#xff0c;可以使用它来替换 Hystrix。但是网上搜了一下国内Resilie…...

Elastic Stack 8.12:通过对 ES|QL 等的改进增强了向量搜索

作者&#xff1a;来自 Elastic Tyler Perkins, Shani Sagiv, Gilad Gal, Ninoslav Miskovic Elastic Stack 8.12 构建于 Apache Lucene 9.9&#xff08;有史以来最快的 Lucene 版本&#xff09;之上&#xff0c;基于我们对标量量化和搜索并发性的贡献&#xff0c;为文本、向量和…...

结构体的内存对齐(计算题常考点)

许久不见我考完试回来啦&#xff0c;让我们接着将结构体进行到底&#xff01; 目录 结构体对齐的意义&#xff1a; 结构体对齐的实现&#xff1a; 对齐规则&#xff1a; 训练&#xff1a; 好到这里误区来了&#xff1a; 总结&#xff1a; 往期回顾&#xff1a; 下期预告&…...

设置Json对象输出字段顺序

场景 通过情况下对前端输出json格式不需要关注字段顺序&#xff0c;但某些特殊场景需要设置字段输出顺序(例nginx需要对特殊字段顺序进行加密处理)&#xff1b;框架有默认的顺序&#xff0c;如 jackson 默认使用字段声明的顺序&#xff0c; fastjson 默认是使用字典序。 jackso…...

当 OpenTelemetry 遇上阿里云 Prometheus

作者&#xff1a;逸陵 背景 在云原生可观测蓬勃发展的当下&#xff0c;想必大家对 OpenTelemetry & Prometheus 并不是太陌生。OpenTelemetry 是 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;旗下的开源项目&#xff0c;它的目标是在云原生时代成为应…...

【Flink-1.17-教程】-【四】Flink DataStream API(1)源算子(Source)

【Flink-1.17-教程】-【四】Flink DataStream API&#xff08;1&#xff09;源算子&#xff08;Source&#xff09; 1&#xff09;执行环境&#xff08;Execution Environment&#xff09;1.1.创建执行环境1.2.执行模式&#xff08;Execution Mode&#xff09;1.3.触发程序执行…...

【蓝桥杯EDA设计与开发】资料汇总以及立创EDA及PCB相关技术资料汇总(持续更新)

[18/01/2024]&#xff1a;目前为了准备蓝桥杯做一些资料贴&#xff0c;于是写下这一篇博客。 各种资料均来源于网络以及部分书籍、手册等文档&#xff0c;参考不保证其准确性。 如果在准备蓝桥杯&#xff0c;可与我私信共同学习&#xff01;&#xff01;&#xff01;&#xf…...

JavaEE学习笔记 2024-1-18 --模块化Controller层、AJAX与JSON

上一篇 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 文章目录 11.模块化Controller层12.AJAX12.1使用场景 13.JSON13.1如何使用后端发送JSON数据 11.模块化Controller层 将对应模块的Servlet写入到一个指定的模块中,模块化编程 使用switch方式 p…...

rpc跨平台通信的简单案例,java和go

当我们使用Go和Java进行RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;跨平台通信时&#xff0c;你可以使用gRPC作为通信框架。gRPC是一个高性能、开源的RPC框架&#xff0c;它支持多种编程语言&#xff0c;包括Go和Java。下面我将为你提供一个简单…...

Java设计模式之观察者模式详解

Java设计模式之观察者模式详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将一同深入探讨Java设计模式之观察者模式&#xff0c;这是一种代…...

分布式锁实现(mysql,以及redis)以及分布式的概念

道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物 我旁边的一位老哥跟我说&#xff0c;你知道分布式是是用来干什么的嘛&#xff1f;一句话给我干懵了&#xff0c;我能隐含知道&#xff0c;大概是用来做分压处理的&#xff0c;并增加系统稳定性的。但是具体如…...

实现分布式锁:Zookeeper vs Redis

目录 引言 1. Zookeeper分布式锁 1.1特点和优势&#xff1a; 强一致性 顺序节点 Watch机制 1.2 Zookeeper分布式锁代码示例 2. Redis分布式锁 2.1特点和优势&#xff1a; 简单高效 可续租性 灵活性 2.2Redis分布式锁代码示例 3.对比和选择 3.1 一致性要求 3.2…...

电脑录屏必备技能,让分享变得更加简单!

随着网络技术的飞速发展&#xff0c;电脑录屏已经成为日常工作和学习中不可或缺的一部分。无论是录制在线课程、游戏解说、软件教程&#xff0c;还是远程会议、演示文稿等&#xff0c;电脑录屏都有着广泛的应用。接下来&#xff0c;本文将介绍三种常见的电脑录屏方法&#xff0…...

重构改善既有代码的设计-学习(一):封装

1、封装记录&#xff08;Encapsulate Record&#xff09; 一些记录性结构&#xff08;例如hash、map、hashmap、dictionary等&#xff09;&#xff0c;一条记录上持有什么字段往往不够直观。如果其使用范围比较宽&#xff0c;这个问题往往会造成许多困扰。所以&#xff0c;记录…...

Python图像处理【19】基于霍夫变换的目标检测

基于霍夫变换的目标检测 0. 前言1. 使用圆形霍夫变换统计图像中圆形对象2. 使用渐进概率霍夫变换检测直线2.1 渐进霍夫变换原理2.2 直线检测 3. 使用广义霍夫变换检测任意形状的对象3.1 广义霍夫变换原理3.2 检测自定义形状 小结系列链接 0. 前言 霍夫变换 (Hough Transform,…...

Spring+SprinMVC+MyBatis注解方式简易模板

SpringSprinMVCMyBatis注解方式简易模板代码Demo GitHub访问 ssm-tpl-anno 一、数据准备 创建数据库test&#xff0c;执行下方SQL创建表ssm-tpl-cfg /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Version :…...

Python基础第五篇(Python数据容器)

文章目录 一、数据容器入门二、数据容器 list 列表(1),list 列表定义(2),list列表的索引(3),list列表的常见操作(4),list列表的遍历 三、数据容器&#xff1a;tuple&#xff08;元组&#xff09;(1),tuple元组定义(2),tuple元组的索引(3),tuple元组的常见操作(4),tuple元组的遍…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...