[华为OD]C卷 精准核算检测 100

题目:

为了达到新冠疫情精准防控的需要,为了避免全员核酸检测Q带来的浪费,需要精准圈定可 

能被感染的人群。现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是 

否存在轨迹的交叉现在给定一组确诊人员编号( 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人要进行核酸检测。

题解:

方法1:可以采用递归,这个比较好理解。建立一个Map<Integer, List<Integer>> patientsContact,存储的是对应的人员编号和他接触人的编号。另外一个是建立一个Set<Integer> result,存储的是需要进行核算检测的人员编号。另一个就是建立初始化为0的数组visited[],数组大小和总人数一致,里面visited[i],就表示编号为第i+1的人员对应的接触人员是否已经检查过了,检查过了那么visited[i]=1. 而递归的终点就是result里面的所有数,都检查过了。

方法2,采用dfs来解析,这个相对有点没相处来,代码也放在下面

代码:

import java.util.*;

public class FindDis {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int patients = Integer.valueOf(sc.nextLine());
        String needFind[] = sc.nextLine().split(",");
        int visited[] = new int[patients];
        for (int i = 0; i < patients; i++) {
            visited[i] = 0;
        }
        Map<Integer, List<Integer>> patientsContact = new HashMap<>();
        Set<Integer> result = new HashSet<>();
        for (int i = 0; i < patients; i++) {
            String contatcs[] = sc.nextLine().split(",");
            List<Integer> contactsList = new ArrayList<>();
            for (int j = 0; j < contatcs.length; j++) {
                if (j != i && contatcs[j].equals("1")) {
                    if (contactsList.contains(j)) {
                        continue;
                    } else {
                        contactsList.add(j);
                    }
                }
            }
            patientsContact.put(i, contactsList);
        }

        //初始检测
        for (int i = 0; i < needFind.length; i++) {
            int present = Integer.valueOf(needFind[i]) - 1;  //人员的编号对应数组位置是大1的,所以这边直接减1 就能更数组对应起来了
            visited[present] = 1;
            result.add(present);
            List<Integer> needs = patientsContact.get(present);
            result.addAll(needs);
        }

        contact(visited, result, patientsContact);
        System.out.println(result.size());
    }

    // 轮询检测
    private static void contact(int[] visited, Set<Integer> result, Map<Integer, List<Integer>> patientsContact) {
        List<Integer> resultList = new ArrayList<>();
        resultList.addAll(result);
        Collections.sort(resultList);
        for (int i : resultList) {
            if (visited[i] == 1) {
                continue;
            } else {
                visited[i] = 1;
                List<Integer> needs = patientsContact.get(i);
                result.addAll(needs);
                contact(visited, result, patientsContact);
            }
        }
    }
}

dfs code

import java.util.Scanner;
import java.util.*;
import java.util.stream.Stream;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
 
public class Main { 
    public static int[] target;
    public static int[][] matrix;
    public static int[] visited;
    public static int n;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = Integer.parseInt(in.nextLine());
        target = split(in.nextLine());
        visited = new int[n];
        matrix = new int[n][n];
        for(int i=0;i<n;i++){
            int[] tmp = split(in.nextLine());
            visited[i] = 0;
            for(int j=0;j<n;j++){
                matrix[i][j] = tmp[j];
            }
        }
 
        for(int i=0;i<target.length;i++){
            dfs(target[i]);
        }
 
        int result = 0;
        int i=0;
        while(true){
            if(i>=n){
                break;
            } else {
                if (visited[i]==1) {
                    boolean flag = false;
                    for(int j=0;j<target.length;j++){
                        if(target[j] == i){
                            flag = true;
                            break;
                        }
                    }
                    if(!flag) {
                        result += 1;
                    }
                }
            }
            i+=1;
        }
        System.out.println(result);
    }
 
    public static void dfs(int index) {
        visited[index] = 1;
        int i=0;
        while(true){
            if(i>=n){
                break;
            } else {
                if (matrix[index][i] == 1 && visited[i]==0) {
                    dfs(i); 
                }
            }
            i+=1;
        }
    }
 
    public static int[] split(String input_str){
        String[] tmp2 = input_str.split(",");
        int[] nums = new int[tmp2.length];
        for (int i = 0; i < tmp2.length; i++) {  
            nums[i] = Integer.parseInt(tmp2[i]);
        }
        return nums;
    }
    
}

验证:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/598936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java面向对象实现文字格斗游戏

面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;是一种程序设计思想&#xff0c;它利用“对象”来封装状态和行为&#xff0c;使得代码更易于维护和扩展。 下面我们使用java中的面向对象编程&#xff0c;来实现一个文字格斗的游戏联系&#xff01; 实…

多行字符串水平相加

题目来源与2023河南省ccpc statements_2.pdf (codeforces.com) ls [ ........ ........ .0000000 .0.....0 .0.....0 .0.....0 .0.....0 .0.....0 .0000000 ........ , ........ ........ .......1 .......1 .......1 .......1 .......1 .......1 .......1 ........, ......…

解决Gitlab集成Jira时报SSL证书问题

1. 问题描述 在gitlab中集成jira的时候&#xff0c;由于jira是企业内部网址&#xff0c;并使用自己签名的SSL证书&#xff0c;一直会报证书验证不过的问题&#xff0c;报错信息如下&#xff1a; Connection failed. Check your integration settings. SSL_connect returned1 …

Python专题:一、安装步骤

1、下载地址&#xff1a;Welcome to Python.org 勾选这个add 其他的全部下一步即可。 运行出现这个即代表安装成功。 Python自带编辑器。 2、推荐使用的sublime 编辑器下载 全部下一步安装。

快速了解OV证书和DV证书的区别及使用场景

OV&#xff08;Organization Validation&#xff0c;组织验证&#xff09;证书和DV&#xff08;Domain Validation&#xff0c;域名验证&#xff09;证书都是SSL/TLS证书&#xff0c;用于保护网站数据传输的安全性和提供身份验证&#xff0c;但两者在验证深度、信任级别、提供的…

知道了这个秘密,你也能在抖音上快速涨1000粉!巨量千川投流揭秘

随着抖音平台的快速发展&#xff0c;越来越多的人开始关注如何在这个平台上快速涨粉。毕竟&#xff0c;拥有大量的粉丝不仅可以提升个人影响力&#xff0c;还能为商业推广带来更多的曝光和机会。那么&#xff0c;抖音怎样快速涨粉呢&#xff1f;本文将为您揭秘其中的秘籍&#…

【Ajax零基础教程】-----第一课 Ajax简介

一、什么是ajax ajax即 Asynchronous javascript And XML (异步 javaScript 和 XML) 是一种创建交互式&#xff0c;快速动态应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新页面局部数据的技术。 二、为什么使用Ajax 通过在后台与服务器进行少…

Ansible自动运维工具之playbook

一.inventory主机清单 1.定义 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或多个主机组内。 2.变量 &#xff08;1&#xff09;主机变量 [webservers] 192.168.10.14 ansible_port22 ansible_userroot ans…

[SWPUCTF 2021 新生赛]PseudoProtocols、[SWPUCTF 2022 新生赛]ez_ez_php

[SWPUCTF 2021 新生赛]PseudoProtocols 打开环境&#xff0c;提示hint.php就在这里&#xff0c;且含有参数wllm 尝试利用PHP伪协议读取该文件 ?wllmphp://filter/convert.base64-encode/resourcehint.php//文件路径php://filter 读取源代码并进行base64编码输出。 有一些敏…

pip是的配置

1 疑惑 当你安装了python后打开cmd命令行输入pip发现运行不起来 疑惑了吧不是说python有内置的吗&#xff0c;怎么运行不起来&#xff0c;很简单没有配置环境变量所以运行不了 2 如何打开环境变量配置 打开电脑的设置 找到关于点开高级系统设置 点开环境变量 点开后有系统变…

Summer ‘24来啦!15个最热门的功能抢先看!

Salesforce Summer 24即将发布&#xff01;本篇文章我们将深入了解Summer 24最热门的声明性功能。 01 自动化Lightning应用程序 新的自动化Lightning应用程序中包含所有与自动化相关的内容。访问该应用程序的用户可以在主应用程序中看到Flow、错误信息和其他基于社区的链接。…

民航电子数据库:replace into导致自增主键异常,新增数据时报错:违反唯一键约束

目录 场景异常原因解决方法一&#xff1a;删除数据重新insert方法二&#xff1a;刚刚自增主键的起始值 场景 1、对接民航电子数据库 2、由于truncate、drop命令会使数据库报错&#xff1a;执行失败&#xff0c;[E14011]资源忙(加锁超时)&#xff0c;所以用了replace into命令…

XORM 框架的使用

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

极致视觉盛宴,尽在Extreme Picture Finder!

在信息爆炸的时代&#xff0c;网络图片如同繁星点点&#xff0c;为我们的生活增添无尽的色彩。然而&#xff0c;如何在浩渺的网海中快速、准确地找到心仪的图片&#xff0c;却成了许多人的难题。此刻&#xff0c;Extreme Picture Finder如同一位贴心的向导&#xff0c;引领我们…

Java初识继承

继承 文章目录 继承为什么需要继承继承中变量的访问特点继承中方法的访问特点继承的优缺点 概念:在Java中&#xff0c;继承是面向对象编程的一个基本特性。它允许我们定义一个新类&#xff0c;它从另一个已经存在的类继承其属性和方法。被继承的类称为父类或超类&#xff0c;新…

JavaScript百炼成仙自学笔记——15

var num "0.01"; var num_arr num.split("."); var num_arr2 num_arr[1]; 0.10.20.3000000000000004 1.001*10001000.9999999999999&#xff1b; 小数运算丢失精度问题的解决办法&#xff1a; 前两种都有缺陷&#xff08;第一种丢失精度&#xff0c…

(论文阅读-优化器)EFFICIENCY IN THE COLUMBIA DATABASE QUERY OPTIMIZER

目录 ABSTRACT Chapter 1. Introduction Chapter 2. Terminology 2.1 查询优化器 2.2 逻辑算子和查询树 2.3 物理算子和执行计划 2.4 Groups 2.3 搜索空间 2.6 规则 Chapter 3. Related Work 3.1 System R和Starburst优化器 3.2 Exodus和Volcano优化生成器 3.3 Cas…

PyCharm安装详细教程

PyCharm安装详细教程 PyCharm简介及其下载网站 PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment&#xff0c;集成开发环境)&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。PyCharm提供了代码编辑、调试、语法高亮…

最常用的AI工具

在日常工作生活中&#xff0c;我试用了几十种AI人工智能工具&#xff0c;下面我来推荐下我最常使用&#xff0c;也是最方便快捷的AI工具。 1百度文心一言 文心一言是一个综合性的大语言模型&#xff0c;整合了很多优秀的提示词&#xff0c;尤其是文心4.0大模型&#xff0c;在中…

做私域,朋友圈到底该怎么发?

说到做私域&#xff0c;很多人都会问&#xff1a;朋友圈该怎么发&#xff1f;相信大家的朋友圈早已经被各种广告攻占了&#xff0c;很多也都被大家屏蔽了。但如果要做私域&#xff0c;单纯发广告是行不通的&#xff0c;可是现在依然有很多人&#xff0c;认为做私域就是狂发朋友…